【发布时间】:2017-09-12 15:47:30
【问题描述】:
即使指定了-Wall,Apple 的 LLVM 也不会发出警告:
uint8_t tta;
typedef uint32_t TT;
TT ttb;
ttb= 0xdeadbeef;
tta = ttb;
// here tta is only 0xEF
如何强制编译器在赋值期间警告数据丢失?
【问题讨论】:
-
不是精度损失,而是数据丢失。并且是完全合法的,编译器发出警告是可选的。
-
它完全按照您的要求执行:丢弃前 3 个字节并将底部字节压缩到变量
uint8_t -
编译器应该警告真正的问题,比如未定义的行为等等。
-
@AnttiHaapala 然而,类似的事情被报告并被接受为 GCC 中的一个错误:gcc.gnu.org/bugzilla/show_bug.cgi?id=2707
-
@EugeneSh。是的,我的意思是
-Wall就是这样做的。它在 GCC 或 clang 中不包含-Wconversion或类似...
标签: c macos clang llvm compiler-warnings