如何在Clang编译器中无警告使用typeof关键字?
解决Clang下使用
typeof的警告问题 方案1:启用GNU扩展标准(推荐)
Clang在GNU C标准模式下(如-std=gnu99、-std=gnu11、-std=gnu17等),会将typeof视为内置关键字,无需通过宏定义映射,自然不会触发任何警告。
编译时添加对应参数即可:
clang -std=gnu11 vector.c -o vector
此时直接在代码中使用typeof就能正常编译,不会出现-Wlanguage-extension-token或-Wkeyword-macro警告。
方案2:调整宏定义并屏蔽特定警告(仅当无法使用GNU标准时)
如果必须使用纯C标准(如-std=c99),可以保留原宏定义,同时添加编译选项屏蔽-Wkeyword-macro警告:
- 保留头文件中的宏定义:
#ifndef typeof #ifdef __clang__ #define typeof(x) __typeof__(x) #endif #endif
- 编译时添加警告屏蔽参数:
clang -std=c99 -Wno-keyword-macro vector.c -o vector
不过这种方法会屏蔽所有关键字被宏隐藏的警告,可能错过其他潜在问题,因此优先推荐方案1。
为什么直接用__typeof__无警告?
__typeof__是Clang和GCC共同支持的编译器保留扩展关键字(带双下划线的标识符属于编译器专属扩展范畴),不属于普通语言扩展,因此直接使用不会触发任何警告,但写法不如typeof简洁。
内容的提问来源于stack exchange,提问作者Pragmatic
相关产品推荐
相关产品推荐

