即使有 -Wall 标志,GCC 也不会发出警告
gcc not giving warning even with -Wall flag
我用 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_t
或 void*
的类型 -- 这意味着任何指向对象的指针或指向不完整类型的参数都将隐式转换为 void*
,并且不需要编译时诊断。
这是一个不幸的选择,似乎不是POSIX强加的。您只需要小心传递正确类型的参数,而无需编译器的任何帮助。
相关文章:
- GCC对可能有效的代码抛出init list生存期警告
- 为什么 gcc 会给我可能未初始化的警告 deque::insert 带有过滤范围
- GCC 警告和 gcc 错误消息之间的区别
- GCC:使用 c++11 时发出警告
- 当 noexcept 函数尝试在 gcc 或 clang 中调用非 noexcept 函数时启用警告
- 在 GCC 中启用"differing levels of indirection"警告/错误
- Steam 回调在 Linux / GCC 编译期间触发警告
- 为什么 gcc 警告只针对统一初始化缩小转换范围?
- 如何禁用没有命令行开关的 gcc 警告?
- 符号可见性和 gcc 警告
- 为什么 gcc 和 clang 都没有发出任何警告?
- [[maybe_unused]] 在成员变量上,GCC 警告(不正确?)该属性被忽略
- GCC 7,-隐式故障警告,以及清除它们的便携式方法
- 是否有 GCC 警告,用于使用 C 库中的符号而不是通过命名空间 std?
- GCC 编译时出现警告:未知转义序列:"\040"
- 是否有 GCC 标志来发出有关作用域内相同变量重定义的警告?
- 警告:逗号的右侧操作数对 GCC 4.4.7 无效
- GCC 6.x警告有关Lambda可见性
- 有没有办法不警告 gcc 中开关缺少"COUNT"枚举常量?
- 如何禁用特定的未知#pragma警告(GCC和/或Clang)