如何将此宏编写为c ++代码?
extern bool distribution_test_server;
bool distribution_test_server = false;
#define GetGoldMultipler() (distribution_test_server ? 3 : 1)
还有一个问题,如果distribution_test_server = false;
如果distribution_test_server
是false
那么......那么宏没有被使用?
示例我有这个:
#define GetGoldMultipler() (distribution_test_server ? 3 : 1)
答案 0 :(得分:2)
您可以将其编写为内联函数:
inline int GetGoldMultipler()
{
return distribution_test_server ? 3 : 1;
}
如果distribution_test_server
为false,则返回的乘数为1.
答案 1 :(得分:1)
它已经 C ++代码,但我想你想把它重写为一个函数:
int GetGoldMultiplier() {return distribution_test_server ? 3 : 1;}
如果distribution_test_server
为假,那么黄金乘数将为1;这是?:
的工作原理。 (如果第一部分为真,则返回第二部分;否则返回第三部分)
答案 2 :(得分:0)
宏将替换你编码的任何地方,其中有符号GetGoldMultiplier(),表达式为" distribution_test_server? 3:1"这是在编译代码之前作为预编译步骤发生的。这也意味着即使您的代码看起来像是在调用它,也永远不会有GetColdMultiplier函数。
这意味着如果distribution_test_server为false,则表达式将始终为1.如果为true,则值始终为3.
那是因为表达式
val = a ? 3 : 1
是从C继承的代码
的简写语法 if (a)
{
val = 3;
}
else
{
val = 1;
}
你可以使用内联函数实现相同的功能,但内联只是一个编译器建议,宏保证这样做。但如果进行内联,则结果将是等效的。
inline int GetGoldMultipler()
{
return distribution_test_server ? 3 : 1;
}
答案 3 :(得分:0)
这个宏中定义的是我们称之为三元表达式的东西。
它基本上是一个连接的“if”条件,这个表达式可以恢复为:
int MyFunction()
{
if(ditribution_test_server == true)
{
return 3;
}
else
{
return 1;
}
}
更多关于三元条件:http://www.cprogramming.com/reference/operators/ternary-operator.html
现在宏是完全不同的东西。当你定义一个宏并在你的代码中使用它时,编译器会用你在右侧写的内容替换宏。
例如:
#define MY_MACRO 8
int a = MY_MACRO;
实际上翻译为:
int a = 8;
更多关于宏:http://www.cplusplus.com/doc/tutorial/preprocessor/
所以在你的代码#define GetGoldMultiplier() (distribution_test_server ? 3 : 1)
中定义了一个名为GetGoldMultiplier()
的宏(它不是一个函数!),它在使用时会被(distribution_test_server ? 3 : 1)
取代,它可以解释为我之前写的