要編譯源文件,clang會先對其進行預處理,然後對其進行編譯。所以如果我運行clang -E,我應該得到一個預處理文件,可以用clang -c進行編譯。但是下面的代碼在預處理之後不能編譯。丟失的橋樑會導致預處理源中的錯誤,但不會導致實際源中的錯誤
int main(int argc, char * argv[])
{
NSString* foo = @"bar";
CFStringRef urlString = CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)foo,
NULL,
(CFStringRef)@"",
kCFStringEncodingUTF8);
CFRelease(urlString);
return 0;
}
它編譯與鐺-c忽略FOO被轉換爲CFStringRef沒有__bridge。當代碼被預處理時,它不再編譯,並且clang抱怨缺少__bridge強制轉換。是否有禁用此行爲的標誌或解決此問題的方法?
全鐺命令(用它用於編譯和與-E預處理)
鐺-x目標c -arch armv7s -fmessage長度= 0 -fdiagnostics出現-音符包括堆疊-fmacro-backtrace-limit = 0 -std = gnu99 -fobjc-arc -Wno-trigraphs -fascal-strings -Os -Wno-missing-field-initializers -Wno-missing-prototypes -Werror = return-type -Wno-implicit -atomic-properties -Werror = deprecated-objc-isa-usage -Werror = objc-root-class -Wno-receiver-is-weak -Wno-arc-repeated-of-weak -Wduplicate-method-match -Wno -missing-braces -Wparentheses -Wwitwit -Wunused-function -Wno-unused-label -Wno -unused-parameter -Wunused-variable -Wunused-value -Wempty-body -Wuninitialized -Wno-unknown-prag mas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wconstant-conversion -Wint-conversion -Wbool-conversion -Wenum-conversion -Wshorten-64-to-32 -Winterinter-sign -Wno-newline- eof -Wno-selector -Wno-strict-selector-match -Wundeclared-selector -Wno-deprecated-implementation -DNS_BLOCK_ASSERTIONS = 1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/ iPhoneOS7.0.sdk -fstrict混疊-Wprotocol -Wdeprecated-聲明-g -fvisibility =隱藏-Wno-符號轉換-miphoneos版本分鐘= 7.0 -c的main.m
如何將__bridge添加到演員陣列? – ipmcc
向我們展示您傳遞給叮噹的其他旗幟。我的猜測是,在一種情況下,你已經啓用了ARC,而在另一種情況下,你沒有。 – alastair
添加__bridge不是我的選擇,因爲我正在對預處理源進行一些轉換 –