相关疑难解决方法(0)

如何制作可变参数宏(可变数量的参数)

我想在C中编写一个宏,它接受任意数量的参数,而不是特定的数字

例:

#define macro( X )  something_complicated( whatever( X ) )
Run Code Online (Sandbox Code Playgroud)

哪里X有任何数量的参数

我需要这个,因为它whatever是重载的,可以用2或4个参数调用.

我试过两次定义宏,但第二个定义覆盖了第一个!

我正在使用的编译器是g ++(更具体地说,mingw)

c g++ variadic c-preprocessor

182
推荐指数
5
解决办法
18万
查看次数

逗号在宏内部的语句中被误解为宏参数分隔符

我刚刚创建了一个Xcode项目并编写了以下代码:

#define foo(x) x
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    int n = 666;
    NSString* string = foo([NSString stringWithFormat: @"%d", n]);
    NSLog (@"string is %@", string);
    [self.window makeKeyAndVisible];
        return YES;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到了一堆错误,因为预处理器决定stringWithFormat之后的逗号:应该将两个宏参数分开,因此我使用了两个参数而不是正确的参数.

所以当我想在我的宏内部的语句中使用逗号时,我该怎么办?

这个C++问题提出了一种方法来围绕逗号放置一些圆形的parens(),这显然导致预处理器意识到逗号不是宏参数分隔符.但是,在我的头脑中,我并没有想到在目标C中这样做的方法.

iphone macros objective-c

1
推荐指数
1
解决办法
469
查看次数

标签 统计

c ×1

c-preprocessor ×1

g++ ×1

iphone ×1

macros ×1

objective-c ×1

variadic ×1