2015-03-13 63 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))等。