C++變量的定義位置

C++ 不但在C語言的基礎(chǔ)上進(jìn)行了很多擴(kuò)展,而且也對C語言部分做了細(xì)節(jié)上的改進(jìn),變量的定義位置就是其中之一。

C89 規(guī)定,所有局部變量都必須定義在函數(shù)開頭,在定義好變量之前不能有其他的執(zhí)行語句。C99 標(biāo)準(zhǔn)取消這這條限制,但是 VC/VS 對 C99 的支持很不積極,仍然要求變量定義在函數(shù)開頭。

C89 和 C99 是兩套不同的C語言標(biāo)準(zhǔn),C99 是 C89 的升級版,我們已在《C語言的三套標(biāo)準(zhǔn):C89、C99和C11》中進(jìn)行了講解。

請看下面的代碼:

#include <stdio.h>

int main(){

? ? int a;

? ? scanf("%d", &a);

? ? int b;

? ? scanf("%d", &b);

? ? int c = a + b;

? ? printf("%d\n", c);

? ? return 0;

}

將代碼保存到源文件main.c,那么它可以在 GCC、Xcode 下編譯通過,但在 VC/VS 下會報錯。GCC、Xcode 對 C99 的支持非常好,可以在函數(shù)的任意位置定義變量;但 VC/VS 對 C99 的支持寥寥無幾,必須在函數(shù)開頭定義好所有變量。

將上面的代碼再保存到源文件main.cpp,那么它在 GCC、Xcode、VC/VS 下都可以編譯通過。這是因?yàn)?C++ 取消了原來的限制,變量只要在使用之前定義好即可,不強(qiáng)制必須在函數(shù)開頭定義所有變量。

注意源文件的后綴,.c是C語言代碼,.cpp是C++代碼,它們的編譯方式不同。

取消限制帶來的另外一個好處是,可以在 for 循環(huán)的控制語句中定義變量,請看下面的例子:

#include <iostream>

using namespace std;

int sum(int n){

? ? int total = 0;

? ? //在for循環(huán)的條件語句內(nèi)部定義變量i

? ? for(int i=1; i<=n ;i++){

? ? ? ? total += i;

? ? }

? ? return total;

}

int main(){

? ? cout<<"Input a interge: ";

? ? int n;

? ? cin>>n;

? ? cout<<"Total: "<<sum(n)<<endl;

? ? return 0;

}

運(yùn)行結(jié)果:

Input a interge: 10

Total: 55

在 for 內(nèi)部定義循環(huán)控制變量 i,會讓代碼看起來更加緊湊,并使得 i 的作用域被限制在整個 for 循環(huán)語句內(nèi)部(包括循環(huán)條件和循環(huán)體),減小了命名沖突的概率。在以后的編碼過程中,我推薦這種寫法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容