C中未命名的参数

在C中,与C ++不同,必须命名函数定义的所有参数。

我没有使用(void)a撤消“未使用的参数”错误,或者公开使用__attribute__((unused)) ,而是创建了以下宏:

 #define UNUSED2(var, uniq) UNUSED_ ## line ## var __attribute((unused)) // squash unused variable warnings, can it be done without var? #define UNUSED(var) UNUSED2(var, __func__) 

像这样使用

 void blah(char const *UNUSED(path)) {} 

有什么方法我可以保证一个独特的“虚拟”变量名称(显然LINE__func__不能削减它),或忽略命名未使用的变量?

Update0

最终使用的代码可在此处获得 。

 #ifdef __cplusplus // C++ allows you to omit parameter names if they're unused # define OMIT_PARAM #else // A variable name must be provided in C, so make one up and mark it unused # define OMIT_PARAM3(uniq) const omitted_parameter_##uniq VARATTR_UNUSED # define OMIT_PARAM2(uniq) OMIT_PARAM3(uniq) # define OMIT_PARAM OMIT_PARAM2(__COUNTER__) #endif #ifdef _MSC_VER # define VARATTR_UNUSED #else # define VARATTR_UNUSED __attribute__((unused)) #endif 

它的使用方式如下:

 void blah(char const *OMIT_PARAM) {} 

并且避免使用未使用的参数,未命名的参数警告,并保证它不会破坏其他变量名称。

VC有一个__COUNTER__宏,它给出了唯一性,看起来GCC有一个与版本4.3.5相同名称的等效宏(尽管我现在还不能找到实时链接)。

停止寻找丑陋的不可移植的,特定于编译器的黑客攻击。 即使函数没有使用它的一个参数,大概存在参数存在的原因:匹配特定的原型/签名,最有可能是为了函数指针类型的兼容性。 假设是这种情况,参数的名称由调用者预期传递的内容决定; 你的特定function没有使用任何参数的事实在很大程度上是无关紧要的。 所以给它正确的名称,如果你坚持启用此警告,请使用__attribute__((unused)) 。 我总是禁用未使用的参数警告,因为它显然是假的。