1. 程式人生 > >C中不能省略形參名字

C中不能省略形參名字

一、C與C++的細微區別

在函式宣告中:
無論是C還是在C++,都可以省略形式引數名。
但是,通常都建議省略形式引數名。

在函式定義中:
1. 當需要使用形式引數的時候,顯然,必須給形式引數命名。

2. 當不需要使用形式引數的時候,C與C++有微小差異:
—— C不能省略形式引數名, 即使不使用。
—— C++可以省略形式引數名如果不使用。
—— 並且在C++中,如果給不使用的形式引數命名,可能會得到一個警告


二、示例:
#include <stdio.h>void greeting_omit(constchar* name);
void greeting_unuse(const
char* name);
void greeting_nowarning(constchar* name);

int main(void) {
    greeting_omit(
"");
    greeting_unuse(
"");
    greeting_nowarning(
"");
    (
void)getchar();
    
return0;
}


三、三個函式分別實現如下:

 三、1
void greeting_omit(constchar* ) {
    printf(
"hello world\n");
}

——在C中是錯誤:
1. msvc :
error C2055: expected formal parameter list, not a type list

error C2055: 應輸入形參表,而不是型別表

2. gcc : (報錯更清晰一些)
error: parameter name omitted
錯誤: 省略引數名

——在C++中正確,且無警告。

 三、2
void greeting_unuse(constchar* name) {
    printf(
"hello Cherrie\n");
}

在C和C++中都正確,但可能得到一個警告:
1. msvc :
warning C4100: 'name' : unreferenced formal parameter
warning C4100: “name”: 未引用的形參

2. gcc :
warning: unused parameter 'name'

警告: 未使用的引數‘name’

在gcc中,開啟這個警告的選項是-Wunused-parameter
該選項包含在-Wall中。

 三、3
void greeting_nowarning(constchar* name) {
    (
void)name;
    printf(
"hello OwnWaterloo\n");
}

在C和C++中都正確,並且無警告。