是否可以定义一个调用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 进行了测试,实际上以下内容也有效。不知道是不是标准:
#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
您的编辑器也会对此更满意,因为它理解函数,但不理解用作宏参数的函数体!
当然可以,但我认为这不会使您的代码更具可读性
#if on_iphone
# define IPHONE_ONLY(...) __VA_ARGS__
#else
# define IPHONE_ONLY(...)
#endif
然后你可以在你的问题中以第二种方式使用宏。
但这真的很丑陋,与任何习惯阅读正确 C 的人的视觉预期背道而驰。
我想你正在寻找ifdef
:
#ifdef IPHONE_ONLY
void myMethod(){
//method body
)
#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
}
使用上面的定义,您将以 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()
不会被定义