是否可以为条件编译定义一个名为IPHONE_ONLY
的宏,如下所示:
IPHONE_ONLY -(void)myMethod {
//method body
}
或
IPHONE_ONLY( -(void)myMethod {
//method body
})
答案 0 :(得分:3)
即使通常你会用#ifdef
包围这个函数,我也用gcc进行了测试,实际上下面也有效。我不知道它是否标准:
#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
你的编辑也会对此感到高兴,因为它理解函数,但不是函数体用作宏参数!
答案 1 :(得分:2)
当然可以,但我认为这不会使您的代码更具可读性
#if on_iphone
# define IPHONE_ONLY(...) __VA_ARGS__
#else
# define IPHONE_ONLY(...)
#endif
然后您可以在问题中使用第二种方式使用宏。
但这非常丑陋,违背了任何习惯阅读C的人的视觉期望。
答案 2 :(得分:1)
我认为您正在寻找ifdef
:
#ifdef IPHONE_ONLY
void myMethod(){
//method body
)
#endif
答案 3 :(得分:0)
#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
}
根据上面的定义,您将以这种方式调用myMethod();
for(i=0; i<10; i++) {
// some thing to do here
MY_METHOD();
// other thing to do here
}
如果定义了IPHONE_ONLY
,则预处理器将通过调用函数MY_METHOD()
来更改宏myMethod();
如果未定义IPHONE_ONLY
,则预处理器将无效地更改MY_METHOD()
。就像你的代码中不存在宏调用MY_METHOD()
一样。并且不会定义函数void myMethod()