为什么将未使用的函数参数值转换为void?在一些C项目中,我看到了这段代码:static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud;
(void)osize;
/* some code not using `ud` or `osize` */
return ptr;}这两个演员是否有任何目的?
2 回答
智慧大石
TA贡献1946条经验 获得超3个赞
在原型中使用未使用的参数的原因通常是因为函数需要符合某些外部API - 可能它是一个库函数,或者指向该函数的指针被传递给另一个需要此调用约定的函数。但是,并非函数本身实际上需要调用约定使用的所有参数。
在正文中提及参数名称的原因是为了避免类似的警告
unused.c: In function ‘l_alloc’:unused.c:3:22: warning: unused parameter ‘ud’ [-Wunused-parameter] void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { ^~
使用函数体中的实际参数可以抑制此警告。例如,如果您有以下语句:
ud;
此警告现已被取消。但是现在GCC会发出另一个警告:
unused.c:5:5: warning: statement with no effect [-Wunused-value] ud; ^~
此警告告诉该语句ud;
虽然在语法上是有效的C,但根本不会影响任何内容,并且可能是一个错误,与语句不同
abort;
也许应该写成abort();
代替它来做某事。
这就是(void)
演员阵容的来源 - 它将明确地告诉编译器该语句应该完全没有任何影响。
- 2 回答
- 0 关注
- 646 浏览
添加回答
举报
0/150
提交
取消