0

是否可以定义一个调用IPHONE_ONLY条件编译的宏,如下所示:

IPHONE_ONLY -(void)myMethod {
    //method body
}

或者

IPHONE_ONLY( -(void)myMethod {
    //method body
})
4

4 回答 4

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

您的编辑器也会对此更满意,因为它理解函数,但不理解用作宏参数的函数体!

于 2013-02-04T10:44:01.137 回答
2

当然可以,但我认为这不会使您的代码更具可读性

#if on_iphone
# define IPHONE_ONLY(...) __VA_ARGS__
#else
# define IPHONE_ONLY(...) 
#endif

然后你可以在你的问题中以第二种方式使用宏。

但这真的很丑陋,与任何习惯阅读正确 C 的人的视觉预期背道而驰。

于 2013-02-04T11:09:14.773 回答
1

我想你正在寻找ifdef

#ifdef IPHONE_ONLY
void myMethod(){
    //method body
)
#endif
于 2013-02-04T10:41:48.707 回答
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()不会被定义

于 2013-02-04T10:44:23.697 回答