gpt4 book ai didi

c - (void)var 实际上做了什么?

转载 作者:太空狗 更新时间:2023-10-29 16:33:50 24 4
gpt4 key购买 nike

考虑以下 main():

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

在使用 cc -Wall -Wextra 编译时,会生成“未使用参数”的警告。

当我不需要在函数中使用参数时(例如在不使用其 int 参数的 signal handler function 中),我习惯于执行以下操作:

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

(对于那个特定的 main(),我有时会看到其他人这样做:argv = argv - argc + argc)

但是(void)var 实际上做了什么

我知道 (void) 是一个转换,所以我想我正在转换变量? var; 行(没有转换)是做什么的?是空赋值,还是空表达式?

我想了解实际情况。

最佳答案

这只是一种创建对变量的“无害”引用的方法。编译器不会提示一个未使用的变量,因为你确实引用了这个值,它也不会提示你没有对表达式 var 的值做任何事情,因为你显式地转换了它无效(无),表示您不关心该值。

我之前没有看到变量的这种用法(因为我使用的编译器通常不会提示未使用的函数参数,)但我看到它经常被用来向编译器表明你并不真正关心一个函数的返回值。 printf(), 例如,返回一个值,但 99% 的 C 程序员不知道(或不关心)它返回什么。为了让一些挑剔的编译器或 lint 工具不提示未使用的返回值,您可以将返回值转换为 void,以表明您知道它在那里,并且您明确地不关心它。

除了向编译器传达您的意图(您不关心此值)之外,它实际上不做任何事情 - 它只是对编译器的提示。

关于c - (void)var 实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com