即使有 -Wall 标志,GCC 也不会发出警告

gcc not giving warning even with -Wall flag

本文关键字:警告 GCC -Wall 标志      更新时间:2023-10-16

我用 timer_t*(指针)或 timer_t 类型的参数调用函数timer_settimer,gcc 编译了两个版本。不会给出任何错误或仅此而已。

void initialize_timer(timer_t * tid, int seconds)
    ...
    timer_settime(*tid, 0, ts, NULL) == -1;
    OR
    timer_settime(tid, 0, ts, NULL) == -1;
没有

错误没有任何东西。(第一个版本工作正常,第二个错误)。这是我的制作文件:

all: 
    gcc -Wall -ggdb -lrt  -pthread -o jenia_thread thread.c  

如何使 gcc 输出所有警告?

提前谢谢。

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

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

(您必须在系统包含文件中深入多个级别才能找到它;我用gcc -E编译了一个小程序,以查看扩展了所有包含的预处理源代码。

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

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

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