1

timer_settimer使用类型timer_t*(指针)的参数调用该函数,或者timer_tgcc 编译这两个版本。不给出任何错误或其他任何内容。

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 输出所有警告?

提前致谢。

4

1 回答 1

2

类型timer_t定义为void*。具体来说,在我的系统上,我有:

typedef void * __timer_t;
...
typedef __timer_t timer_t;

(你必须深入系统包含文件的几个层次才能找到它;我编译了一个小程序gcc -E来查看所有包含扩展的预处理源。)

您的系统很可能有类似的东西,特别是如果您使用的是 GNU C 库。

的第一个参数timer_settime是 typetimer_tvoid*-- 这意味着任何指向对象或指向不完整类型的参数都将被隐式转换为void*并且不需要编译时诊断。

这是一个不幸的选择,而且似乎不是 POSIX 强加的。您只需要小心地传递正确类型的参数,而无需编译器的任何帮助。

于 2013-10-16T21:41:53.947 回答