即使使用-Wall标志,gcc也不会发出警告

时间:2013-10-16 17:33:50

标签: c++ c gcc makefile posix

我使用类型为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输出所有警告?

提前致谢。

1 个答案:

答案 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强加。在没有编译器帮助的情况下,您必须小心传递正确类型的参数。