如何禁用 clang 的 GNU 扩展?

问题描述 投票:0回答:1

我尝试过“-U__GNUC__”,但预处理器的输出仍然包含“__attribute__”或类似的内容。如何让编译器丢弃那些不标准的东西呢?我的操作系统是 OS X 10.10,当我使用选项“-U__GNUC__”运行编译器时,它会抱怨:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/cdefs.h:81:2:
 warning: 
   "Unsupported compiler detected" [-W#warnings]
#warning "Unsupported compiler detected"
c gcc clang
1个回答
1
投票

你可能做不到。

您可以尝试使用

clang -std=c11 -pedantic-errors -Wall -Wextra -Werrors
进行编译;请参阅此处;这应该在您的用户代码中禁止
__attribute__
,但仍然允许在系统标头中使用它。

请注意,根据标准,以

_
开头的标识符是实现保留的,不应在符合标准的应用程序代码中使用。

因此您的实现(例如标准 C 或标准 C++ 库)可以(并且可能确实)使用它们。

system
标头中的几个 __attribute__-s 对于编译器完成的优化很有用,例如编译器可以优化您对
malloc
的使用,因为系统标头可能会使用
malloc
声明
__attribute__((malloc))
等。

© www.soinside.com 2019 - 2024. All rights reserved.