重写将宏定义为c ++代码?

时间:2015-12-01 03:33:34

标签: c++ macros

如何将此宏编写为c ++代码?

extern bool distribution_test_server;
bool distribution_test_server = false;
#define GetGoldMultipler() (distribution_test_server ? 3 : 1)

还有一个问题,如果distribution_test_server = false;

,那么宏的价值是多少

如果distribution_test_serverfalse那么......那么宏没有被使用?

示例我有这个:

#define GetGoldMultipler() (distribution_test_server ? 3 : 1)

4 个答案:

答案 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)取代,它可以解释为我之前写的