我尝试过“-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"
你可能做不到。
您可以尝试使用
clang -std=c11 -pedantic-errors -Wall -Wextra -Werrors
进行编译;请参阅此处;这应该在您的用户代码中禁止 __attribute__
,但仍然允许在系统标头中使用它。
请注意,根据标准,以
_
开头的标识符是实现保留的,不应在符合标准的应用程序代码中使用。
因此您的实现(例如标准 C 或标准 C++ 库)可以(并且可能确实)使用它们。
system标头中的几个
__attribute__
-s 对于编译器完成的优化很有用,例如编译器可以优化您对 malloc
的使用,因为系统标头可能会使用 malloc
声明 __attribute__((malloc))
等。