##预处理程序运算符和变量

时间:2017-12-29 03:26:40

标签: c concatenation c-preprocessor

我已经搜索过,似乎无法使用##预处理程序运算符在C中执行此操作。

我想使用变量值并创建一个像MY_FUNC_3

这样的函数名称

我知道如何使用' #define VALUE 3'并且这样做,但我如何对变量做同样的事。

#define PASTE(x,y) x ## y
#define function (func_name, value) PASTE(x,y)

int a= 3;

for (int a = 2; a < 10; a++)
{
    printf("%s\n", function(MY_FUNC, a))
}

2 个答案:

答案 0 :(得分:1)

你不能使用预处理器,因为它是在编译之前调用的,所以它不知道任何可能的运行时行为。

您可以使用函数数组解决此问题,或者使用函数指针数组更精确地解决此问题,例如:

#include <stdio.h>

const char * function1(void)
{
  return "Result 1";
}

const char * function2(void)
{
  return "Result 2";
}

const char * function3(void)
{
  return "Result 3";
}

const char * (*functions[])(void) = {
  function1,
  function2,
  function3,
  NULL
};

int main(void)
{
  size_t i = 0;
  while (NULL != functions[i])
  {
    printf("function[%zu]: '%s'\n", i, functions[i]());
    ++i;
  }
}

结果:

function[0]: 'Result 1'
function[1]: 'Result 2'
function[2]: 'Result 3'

答案 1 :(得分:0)

你不能用保存char的预处理器值来做,但你可以这样做:

#define PASTE_(x, y) x ##y
#define PASTE(x, y) PASTE_(x, y)

#define value 3
void PASTE(FuncName, value)()
{...}