2015-03-13 61 views
0

我试过“-U__GNUC__”,但预处理器的输出仍然包含“__attribute__”或类似的东西。如何让编译器丢弃那些非标准的东西?我的操作系统是OS X 10.10,当我与选项“-U__GNUC__”运行编译器,它抱怨:如何禁用clang的gnu扩展?

/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" 
+1

尝试使用-std =标志。 – 2015-03-13 06:53:56

+0

仍然无法正常工作。 – noinput 2015-03-13 06:56:44

+2

你为什么要这么做?很可能您的系统C库标头包含此类扩展名。 – 2015-03-13 07:03:21

回答

0

你可能无法做到这一点。

您可以尝试使用clang -std=c11 -pedantic-errors -Wall -Wextra -Werrors进行编译;见here;这应该禁止您的用户代码中的__attribute__,但仍然允许在系统头文件中。

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

因此,您的实现(例如标准C或标准C++库)可以(也可能)使用它们。和几个__attribute__-s在系统报头对于编译器完成的优化是有用的,例如,编译器可以优化您对malloc的使用,因为系统标头可能声明malloc__attribute__((malloc))等。