【问题标题】:defining unused parameters in C在 C 中定义未使用的参数
【发布时间】:2012-04-30 21:47:02
【问题描述】:

我需要使用 pthreat 但我不需要将任何参数传递给函数。因此,我将 NULL 传递给 pthread_create 上的函数。我有 7 个 pthread,所以 gcc 编译器警告我有 7 个未使用的参数。如何将这 7 个参数定义为 C 编程中未使用的参数?如果我不将这些参数定义为未使用,会导致任何问题吗?提前感谢您的回复。

void *timer1_function(void * parameter1){
//<statement>
}

int main(int argc,char *argv[]){
  int thread_check1;
  pthread_t timer1;
  thread_check1 = pthread_create( &timer1, NULL, timer1_function,  NULL);
    if(thread_check1 !=0){
        perror("thread creation failed");
        exit(EXIT_FAILURE);
    }
while(1){}
return 0;
}

【问题讨论】:

标签: c gcc pthreads posix


【解决方案1】:

您可以像这样将参数转换为void

void *timer1_function(void * parameter1) {
  (void) parameter1; // Suppress the warning.
  // <statement>
}

【讨论】:

【解决方案2】:

GCC 有一个“属性”工具,可以用来标记未使用的参数。使用

void *timer1_function(__attribute__((unused))void *parameter1)

【讨论】:

    【解决方案3】:

    两种常用的技术:

    1) 省略未使用参数的名称:

    void *timer1_function(void *) { ... }
    

    2) 注释掉参数名:

    void *timer1_function(void * /*parameter1*/) { ... }
    

    -- 克里斯

    【讨论】:

    • 如果我这样做(在 C11 中),我会得到 parameter name omitted。很确定这对 C(而不是 C++)无效。
    【解决方案4】:

    默认情况下,GCC 不会产生这个警告,即使是 -Wall。我认为当您无法控制环境时,可能需要其他问题中显示的解决方法,但如果您这样做,只需删除标志 (-Wunused-parameter)。

    【讨论】:

    • +1 这是最好的解决方法。这个警告基本上是愚蠢的。每当获取函数的地址时,GCC 都应该关闭它的“未使用参数”警告,因为无论它们是否在内部使用,它们都被用作函数所需接口的一部分。我个人会说同样的事情也应该适用于所有外部功能......
    • @R 由于这个警告,几天前我在我的代码中发现了一个错误。我正在重构一些函数并输入 0 而不是作为函数参数传入的位掩码的标识符。启用 -Wextra 让我可以立即修复几天前引入的一个微妙错误。
    • -1:由于此警告被激活,我经常发现错误。
    • 对于已有多年历史且经过修改的代码...随着时间的推移,有时会添加 args 并最终在以后不再使用,因此此警告可能非常有用,尤其是当它难以通过时函数的某些参数(查找或是否必须计算),却发现它甚至没有被使用。
    【解决方案5】:

    在函数体中不使用参数完全没问题。

    为避免编译器警告(如果您的实现中有),您可以这样做:

    void *timer1_function(void * parameter1)
    {
        // no operation, will likely be optimized out by the compiler
        parameter1 = parameter1;  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-11
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多