【问题标题】:How do I get rid of the unused parameter warning in C with gcc 4.8.4 [-Wunused-parameter] [duplicate]如何使用 gcc 4.8.4 [-Wunused-parameter] [重复] 摆脱 C 中未使用的参数警告
【发布时间】:2019-12-11 02:17:04
【问题描述】:

使用 gcc 4.8.4 -Wall -Wextra -Wpedantic。我想用 argv 作为可执行文件名,不需要 argc。

如果我这样做

int main(int argc, char *argv[])

我收到此警告:

abc.c:5:14: warning: unused parameter ‘argc’ [-Wunused-parameter]

过去我刚刚做过

int main(int, char *argv[])

摆脱警告,但那可能是 C++。现在我得到一个错误:

abc.c:5:1: error: parameter name omitted

有没有办法访问 argv 而不会收到未访问 argc 的警告(打开 gcc 警告)?

【问题讨论】:

  • (void)argc; 作为main 中的语句(不适用于定义本身)。
  • @WeatherVane int main ( (void) argc, char *argv[]) 出现编译错误
  • 我更新了评论。
  • 准确地说,C中没有“未使用的参数错误”。
  • abc.c:5:1: error: parameter name omitted。翻译:“我完全理解你的语法,但你不能拥有它!C++ 在你左边的大厅里。”

标签: c gcc


【解决方案1】:

我的评论不清楚:

您可以在main() 中写入(void)argc,以便摆脱编译器消息而不会对您的程序造成任何损害

int main(int argc, char *argv[])
{
    char *prog = argv[0];
    (void)argc;
    return 0;
}

【讨论】:

  • 有趣。它只是简单地执行转换并且不将其存储在任何地方,还是还有更多?一些澄清可能是值得的。
  • @LudaOtaku 我以前总是只写argc; 而没有(void),但从来不需要函数参数,只需要一个局部变量,直到有人建议我回答正确的方法。抱歉,没有参考资料。
  • 那很好,我认为它已经足够清楚了,它只是一个未使用的语句,而不是告诉编译器在某种程度上忽略这个变量的特殊语法。我很困惑,因为我通常只是注释掉我不需要的变量,并故意留下函数参数的警告,所以我知道我还没有完成函数的编写。但是我仍然认为不应该对 main 执行此操作,因为如果在 argv 中传入的命令行参数不足,它可能会导致段错误。可以调试,而不是发布。
  • @LudaOtaku 这是对argc 的引用,它什么都不做。 argc + 1; 之类的语句可能会生成警告,因为未分配该表达式的结果。我想(void) 也是为了消除那个“无效”的警告。
  • 是的,我考虑过这样做并意识到它会产生警告是的。这样做是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多