是否有可能定義一個宏叫IPHONE_ONLY
條件編譯,看起來像這樣:您可以爲條件編譯定義函數樣式宏嗎?
IPHONE_ONLY -(void)myMethod {
//method body
}
或
IPHONE_ONLY(-(void)myMethod {
//method body
})
是否有可能定義一個宏叫IPHONE_ONLY
條件編譯,看起來像這樣:您可以爲條件編譯定義函數樣式宏嗎?
IPHONE_ONLY -(void)myMethod {
//method body
}
或
IPHONE_ONLY(-(void)myMethod {
//method body
})
即使雖然通常你會圍繞函數#ifdef
,我用gcc進行測試,實際上f以後也會起作用。我不知道它是否爲標準:
#ifdef IPHONE
# define IPHONE_ONLY(...) __VA_ARGS__
#else
# define IPHONE_ONLY(...)
#endif
IPHONE_ONLY(int func(void)
{
return 12;
})
我從來沒有見過任何人這樣的代碼,雖然。這是很常見的寫這樣的功能是這樣的:
#ifdef IPHONE
int func(void)
{
return 12;
}
#endif
你們的編輯也將與此非常快樂,因爲它瞭解功能,而不是功能作爲宏參數的身體!
#ifdef IPHONE_ONLY
# define MY_METHOD() myMethod();
void myMethod() {
......
}
#else
# define MY_METHOD()
#endif
在您的項目的c代碼中,您調用MY_METHOD()
。
這將避免你打電話那樣myMethod()
每次與定義需要在你的代碼
for(i=0; i<10; i++) {
// some thing to do here
#ifdef IPHONE_ONLY
myMethod();
#endif
// other thing to do here
}
時間上面,你會以這種方式
for(i=0; i<10; i++) {
// some thing to do here
MY_METHOD();
// other thing to do here
}
如果IPHONE_ONLY
打電話給你myMethod();
被定義,則前置器將通過函數調用myMethod();
如果IPHONE_ONLY
沒有被定義,那麼預處理器將不會改變MY_METHOD()
。這就像您的代碼中不存在宏調用MY_METHOD()
。並且功能void myMethod()
不會被定義
當然可以,但我不認爲這將使你的代碼更易讀
#if on_iphone
# define IPHONE_ONLY(...) __VA_ARGS__
#else
# define IPHONE_ONLY(...)
#endif
,然後你可以使用宏你擁有了它的第二個方法在你的問題。
但這真是醜陋和反對誰是用來讀取正確C.
難道周圍與你'#ifdef'工作中的作用任何人的視覺的期望呢? – Shahbaz
@Shahbaz它會但我正在處理一個包含大約一百個方法定義的頭文件,並且正在尋找一些在眼睛上更容易的東西(至少我的眼睛)。 – lms