gpt4 book ai didi

objective-c - 如何将函数的结果作为宏变量传递?

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:03 25 4
gpt4 key购买 nike

假设我设置了一个宏展开如下...

#define WARN_START @"DANGER"
#define WARN_RESET @"THE COAST IS CLEAR"
#define WARN(x) WARN_START x WARN_RESET

INPUT WARN(@"*** 你老板来了。***")

输出危险 *** 你的老板来了。 *** 海岸晴朗

假设我有一个函数……

NSString * WhosComing(void){ return @"*** Some fool. ***"; }

如何将这样一个函数的结果传递给宏,而不先将其分配给变量,即

WARN(谁来了())

错误应为')'

我搞砸了额外的括号,即

#define WARN((x))….或 ...WARN_START (x) WARN_RESET 但是...

错误二进制表达式的无效操作数

以及尝试将 cuntion 作为指针或其他东西传递,即 WARN(&WhosComing()),但无济于事。我确信这是可能的/直接的……但我没有计算机科学学位,所以我从来没有学过如何……对某人来说简单的答案?

最佳答案

你不能用宏做你想做的事。 C 语言(以及 Objective-C、C++)的一个特性是在编译期间将相邻的字符串文字连接起来,并且针对 Objective-C 进行了扩展以包含 NSString 文字。

您的宏扩展为:

@"DANGER" @"*** Your boss is coming. ***" @"THE COAST IS CLEAR"

然后编译器将这 3 个文字连接成 1 个。

但是传入你的函数,你会得到:

@"DANGER" WhosComing() @"THE COAST IS CLEAR"

这是无效代码。

有多种解决方案;如果真的担心函数调用的成本,你可以使用一个真正的函数,内联它:

NS_INLINE NSString *WARN(NSString *msg)
{
return [NSString stringWithFormat:@"%@%@%@", WARN_START, msg, WARN_RESET];
}

关于objective-c - 如何将函数的结果作为宏变量传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15748492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com