2016-02-17 56 views
4

所有現代編譯器(clang 3.6,gcc 4.8)允許在參數列表中使用_編寫函數。 像這樣:作爲C語言中的一個參數,下劃線是什麼意思?

int func(_) 
{ 
    return 1; 
} 

即使main允許這樣的參數(int main(_)

唯一警告是

p1_concat.c:31:5:警告:類型的 '_' 默認爲'int'[默認啓用]

下劃線是什麼意思?

+0

這只是一個變量名稱,就像任何其他名稱一樣。編譯器不會專門處理它。有時候人們會將它用於沒有使用價值的變量,但這純粹是一種慣例,在其他語言中更常見。警告正是它所說的,如果您使用任何其他名稱,您會看到相同的內容。 'x'。 –

回答

4

下劃線_是一個有效的普通標識符。定義一個函數是這樣的:

type function(arg1, arg2, arg3) 
{ 
    ... 
} 

(無參數類型i.ee)是一種過時的風格從前期ANSI天稱爲ķ& R-樣式定義回來。所有參數都隱式類型int除非你明確聲明他們有不同的類型是這樣的:

type function(arg1, arg2, arg3) 
    type arg1; 
    type arg2; 
    type arg3; 
{ 
    ... 
} 

其中type arg1;是一個普通的聲明。這些定義仍然允許但不推薦使用。由於您沒有明確聲明_,因此編譯器會將隱式聲明警告給您,如int

0

int func(_) 
{ 
    return 1; 
} 

是具有標識符列表從與名稱_(下劃線)一個標識符consisiting函數定義。

這不是一個正確的函數定義。根據C標準(6.9.1函數定義)

6如果聲明符包括標識符列表,在 每個聲明的聲明列表應當具有至少一個聲明符,那些 說明符應宣佈從唯一標識符標識符列表, ,並且標識符列表中的每個標識符將被聲明爲

這將是更正確地定義比如函數像

int func(_) 
int _; 
{ 
    return 1; 
} 

至於主要

int main(_) 
{ 
    //... 
} 

類似的定義則不是主要的,即使一個有效的聲明添加標識符_的定義,就像上面所做的那樣

int main(_) 
int _; 
{ 
    //... 
} 

C標準不允許用標識符列表聲明main。至少它不是主要的標準聲明。

+0

你不應該寫「K&R風格」功能。按照6.11.7,這是一個過時的特徵。 – Lundin

相關問題