我有一個C代碼,它使用簡單的逗號運營商爲什麼下面的C代碼失敗而編譯
main()
{
int a= 1,2,3;
printf("%d",a);
}
現在,當我編譯了一個錯誤,而很少修改同一程序運行正常
main()
{
int a;
a= 1,2,3;
printf("%d",a);
}
爲什麼這樣?
我有一個C代碼,它使用簡單的逗號運營商爲什麼下面的C代碼失敗而編譯
main()
{
int a= 1,2,3;
printf("%d",a);
}
現在,當我編譯了一個錯誤,而很少修改同一程序運行正常
main()
{
int a;
a= 1,2,3;
printf("%d",a);
}
爲什麼這樣?
在第一種情況下,會引發錯誤,因爲如果您假裝聲明多個變量或分配多個值,編譯器無法區分。
int a= 1,2,3;
您的意思是int a; a = 1, 2, 3
,或者int a = 1, int 2, int 3
?編譯器無法從上下文中得知(即使或不是合法變量名稱)。
第二種情況下不存在這種歧義,因此沒有錯誤(但是仍然發出警告)。
PS:它是int main()
而不是void main()
。
和聲明'a = 1,2,3;'就像有 a = 1; 2; 3; 並且在執行第一個語句之後,a被賦值1, 表達式'2'和'3'被評估,但沒有任何變化... – Mallik 2012-03-01 12:01:38
使用變量初始化形式時,逗號不作爲相同的運算符。這是一種特殊的簡短形式,用於在同一行中聲明多個變量,因此需要自己的語法。
因此,在語句int a = 1, 2, 3
中,逗號實際上的解釋與語句a = 1, 2, 3
中的不同。
前者是語法錯誤,因爲它不符合多變量聲明形式。第二種是有效的語法,但正如其他人指出的那樣毫無意義,因爲語句2;
和3;
雖然在語法上正確,但什麼也不做。
第二個代碼不會**編譯。 '.. \ main.c:7:5:error:expected';' 'printf''之前 – m0skit0 2012-03-01 11:31:05
我的錯誤,更正了它 – 2012-03-01 11:32:28
其中是3printf(「%d」,3); ,我只能看到printf(「%d」,a); – 2012-03-01 11:38:35