2016-04-29 70 views
1

在「蘋果LLVM 7.0 - 預處理」「生成設置」選項卡下的部分,我已經定義了一個預處理宏爲:訪問的Xcode LLVM處理器宏

HUBNAME=myhub 

在我的代碼,我想指HUBNAME的值作爲一個字符串:

SBNotificationHub* hub = [[SBNotificationHub alloc] initWithConnectionString:HUBLISTENACCESS notificationHubPath:HUBNAME]; 

但Xcode認爲「myhub」是我的變量名:

使用未申報的ident的ifier「myhub」

有人可以幫助我弄清楚如何訪問「myhub」作爲一個字符串?

回答

1

類似TO_STR(arg)=#arg HUBNAME=TO_STR("myhub")? (或者只是TO_STR(myhub) W/O報價)

NSLog(@"%s", HUBNAME); // SO36947532[13085:4401425] myhub 

從GNU:

3.4 Stringification

有時你可能需要一個宏參數轉換爲字符串常量 。參數不會在字符串常量內部被替換,但是您可以使用#預處理運算符代替 。當宏參數 與前導#一起使用時,預處理器將其替換爲實際參數的文字文本,並將其轉換爲字符串常量。 與常規參數替換不同,參數不是首先宏展開的 。這被稱爲串列化

Xcode

+0

謝謝!像魅力一樣工作。有一點需要注意的是,當我從我的代碼中訪問宏時,我使用了「@HUBNAME」。 – Vee

+0

任何機會,你可以解決一個相關的問題:http://stackoverflow.com/questions/36988067/stringify-endpoint-for-xcode-llvm-processor-macros – Vee

+0

我目前沒有電腦在東京的某個地方几天。如果沒人做,我會在下週看看。 –