未知的C表达式

时间:2010-09-03 02:30:05

标签: c

我在示例程序中遇到了以下行,并且不知道它是什么。我想这是一个函数调用,但我不确定:

(void) pthread_mutex_init(&bottleneck, &mxattr);    

如果是函数调用,为什么它以(void)开头?我以前从未见过这个。这是更多背景下的界限:

attr_init(pthread_process, pthread_scope, stacksize);    
(void) pthread_mutex_init(&bottleneck, &mxattr);    
barrier_init(&setup_barrier, (2 * ntables) + 1);    

感谢您的帮助。整个计划来自Solaris whitepaper(附录D)

4 个答案:

答案 0 :(得分:7)

这是正常的函数调用。 (void)部分仅表示该函数返回一个值,并且不会对其进行任何操作。删除有关未使用的返回值的任何警告。

请参阅casting unused return values to void

答案 1 :(得分:4)

POSIX Threads

特定通话 - pthread_mutex_init - 返回int。转换为void可能是为了避免在编译时或静态代码分析期间忽略返回值的特定警告。

更新:正如@Jack Kelly对另一个答案所评论的那样,任何好的静态分析工具都会忽略此演员并继续发出警告。静态分析应该通过单独的特定注释来控制,而不是使用可能影响编译器输出的语言结构。

答案 2 :(得分:1)

这是一个函数调用,将结果显式转换为void。这只是一种开发风格,暗示编译器和那些读取此代码的人,函数调用实际上返回了故意忽略的内容。在此示例中,pthread_mutex_init函数返回整数。如果您调用标有warn_unused_result attribute的函数,某些编译器会向您发出警告。

答案 3 :(得分:1)

是的,这是一个函数调用。函数pthread_mutex_init()初始化用于防止多个线程破坏某些共享资源的互斥锁。

该函数返回int(void)标记我们故意忽略返回值。它会阻止编译器抱怨未使用的返回值。