所有現代編譯器(clang 3.6,gcc 4.8)允許在參數列表中使用_
編寫函數。 像這樣:作爲C語言中的一個參數,下劃線是什麼意思?
int func(_)
{
return 1;
}
即使main
允許這樣的參數(int main(_)
)
唯一警告是
p1_concat.c:31:5:警告:類型的 '_' 默認爲'int'[默認啓用]
下劃線是什麼意思?
所有現代編譯器(clang 3.6,gcc 4.8)允許在參數列表中使用_
編寫函數。 像這樣:作爲C語言中的一個參數,下劃線是什麼意思?
int func(_)
{
return 1;
}
即使main
允許這樣的參數(int main(_)
)
唯一警告是
p1_concat.c:31:5:警告:類型的 '_' 默認爲'int'[默認啓用]
下劃線是什麼意思?
下劃線_
是一個有效的普通標識符。定義一個函數是這樣的:
type function(arg1, arg2, arg3)
{
...
}
(無參數類型i.ee)是一種過時的風格從前期ANSI天稱爲ķ& R-樣式定義回來。所有參數都隱式類型int
除非你明確聲明他們有不同的類型是這樣的:
type function(arg1, arg2, arg3)
type arg1;
type arg2;
type arg3;
{
...
}
其中type arg1;
是一個普通的聲明。這些定義仍然允許但不推薦使用。由於您沒有明確聲明_
,因此編譯器會將隱式聲明警告給您,如int
。
這
int func(_)
{
return 1;
}
是具有標識符列表從與名稱_
(下劃線)一個標識符consisiting函數定義。
這不是一個正確的函數定義。根據C標準(6.9.1函數定義)
6如果聲明符包括標識符列表,在 每個聲明的聲明列表應當具有至少一個聲明符,那些 說明符應宣佈從唯一標識符標識符列表, ,並且標識符列表中的每個標識符將被聲明爲。
這將是更正確地定義比如函數像
int func(_)
int _;
{
return 1;
}
至於主要
int main(_)
{
//...
}
類似的定義則不是主要的,即使一個有效的聲明添加標識符_
的定義,就像上面所做的那樣
int main(_)
int _;
{
//...
}
C標準不允許用標識符列表聲明main。至少它不是主要的標準聲明。
你不應該寫「K&R風格」功能。按照6.11.7,這是一個過時的特徵。 – Lundin
這只是一個變量名稱,就像任何其他名稱一樣。編譯器不會專門處理它。有時候人們會將它用於沒有使用價值的變量,但這純粹是一種慣例,在其他語言中更常見。警告正是它所說的,如果您使用任何其他名稱,您會看到相同的內容。 'x'。 –