我使用类型为timer_settimer
(指针)或timer_t*
的参数调用函数timer_t
,并且gcc编译两个版本。不会给出任何错误或其他任何错误。
void initialize_timer(timer_t * tid, int seconds)
...
timer_settime(*tid, 0, ts, NULL) == -1;
OR
timer_settime(tid, 0, ts, NULL) == -1;
没有错误没有。 (第一个版本正常工作。第二个错误)。 这是我的Makefile:
all:
gcc -Wall -ggdb -lrt -pthread -o jenia_thread thread.c
如何让gcc输出所有警告?
提前致谢。
答案 0 :(得分:2)
类型timer_t
定义为void*
。具体来说,在我的系统上,我有:
typedef void * __timer_t;
...
typedef __timer_t timer_t;
(您必须深入系统包含文件中的几个级别才能找到这个;我使用gcc -E
编译了一个小程序,以查看预处理的源,并扩展了所有包含。)
您的系统很可能有类似的东西,特别是如果您使用的是GNU C库。
timer_settime
的第一个参数是timer_t
类型,或void*
- 这意味着任何指针指向对象或指针的参数-to-incomplete类型将隐式转换为void*
,不需要编译时诊断。
这是一个不幸的选择,而且似乎并没有被POSIX强加。在没有编译器帮助的情况下,您必须小心传递正确类型的参数。