C中的下划线是什么意思?

时间:2016-02-17 12:40:35

标签: c function gcc arguments

所有现代编译器(clang 3.6,gcc 4.8)允许在参数中使用_编写函数'名单。 像这样:

int func(_)
{
    return 1;
}

即使main也允许这样的参数(int main(_)

唯一的警告是

  

p1_concat.c:31:5:警告:'_'的类型默认为'int'[默认启用]

这个下划线是什么意思?

2 个答案:

答案 0 :(得分:4)

下划线_是有效的普通标识符。定义这样的函数:

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

(即没有参数类型)是一种不推荐使用的样式,从ANSI之前的日子开始称为 K& R风格的定义。所有参数都隐含地具有类型int,除非你显式地声明它们具有不同的类型:

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

其中type arg1;是普通声明。这些定义仍然允许但已弃用。因为您没有显式声明_,编译器会警告您隐式声明为int

答案 1 :(得分:0)

int func(_)
{
    return 1;
}

是一个函数定义,其标识符列表由一个名称为_(下划线)的标识符组成。

这不是正确的功能定义。根据C标准(6.9.1函数定义)

  

6如果声明者包含一个标识符列表,则每个声明都在   声明清单应至少有一个声明者   声明者只应声明标识符列表中的标识符,   ,标识符列表中的每个标识符都应声明为

定义函数更为正确,例如

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

至于主要的

的类似定义
int main(_)
{
   //...
}

那么它就不是一个有效的main声明,即使添加标识符_的定义就像上面所做的那样

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

C标准不允许使用标识符列表声明main。至少它不是主要的标准声明。