c語言定義變量的位置(轉)


轉載至 http://wenku.baidu.com/view/d3adc6d03186bceb19e8bb6a.html

在標准C中規定變量定義必須放在所有的執行語句之前!一旦在運行語句之間再有定義的話,會報錯誤!
見以下式例:
#include <stdio.h>
int main()
{
    char char1='A';
    printf("大寫字符=%c的ASCII碼=%d\n",char1,char1);
    char char2=char1+32;
    printf("小寫字符=%c的ASCII碼=%d\n",char2,char2);
    return 0;
}
把上述代碼放到命名為test.c的文件中(VC 6.0調用C編譯器),編譯。出現編譯錯誤:
d:/project/c++/test/1.c(12) : error C2143: syntax error : missing ';' before 'type'
d:/project/c++/test/1.c(14) : error C2065: 'char2' : undeclared identifier

這是因為在上述代碼中char char2=char1+32;的定義放在了執行語句printf("大寫字符=%c的ASCII碼=%d/n",char1,char1);的后面導致的;
一旦把上述同樣的語句放到了test.cpp文件中(VC 6.0調用C++編譯器),編譯沒有問題,這是因為編譯器認為上述代碼是C++語法格式的;
在C++中沒有嚴格要求變量定義一定要放在執行語句之前。如果在.c文件中執行上述代碼的話,可以在編譯器設置用C++編譯!

在.c文件中(C)正確的代碼為:
#include <stdio.h>
int main()
{
char char1='A';
char char2=char1+32;
printf("大寫字符=%c的ASCII碼=%d/n",char1,char1);
/*char char2=char1+32; */ /*在C中變量定義必須放在所有的執行語句之前!*/
printf("小寫字符=%c的ASCII碼=%d/n",char2,char2);  
return 0;
}
這就是C標准的問題
C89規定,在任何執行語句之前,在塊的開頭聲明所有局部變量。
C99以及C++中則沒有這個限制,即在首次使用之前,可在塊的任何位置都可以聲明變量
另一方面,編譯器不同也不同,gcc編譯器有很多擴展的功能,可完美支持C99標准。
關於變量的定義:
以花括號{}給包圍起來的代碼段稱為block,只要在block開始的地方定義變量就不會錯;
該變量的作用域和生存期(除了static限定)只在該block里,且該變量可以屏蔽block外的變量;
譬如在block外已經有一個變量名為a = 1的int變量,在block里允許定義一個同名的變量int a = 2,但在block里試着用printf打印的話,會發現printf("%d", a)結果是2.這就叫做屏蔽外面的變量!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM