📜  编写一个C宏PRINT(x)打印x

📅  最后修改于: 2021-05-26 03:12:16             🧑  作者: Mango

乍一看,编写一个打印其参数的C宏似乎是孩子们的游戏。以下程序应该工作,即应打印x

#define PRINT(x) (x)
int main()
{ 
  printf("%s",PRINT(x));
  return 0;
}

但这会发出编译错误,因为x的数据类型(编译器将其视为变量)是未知的。现在看起来并不那么明显。是不是猜怎么着,以下内容也行不通

#define PRINT(x) ('x')
#define PRINT(x) ("x")

但是,如果我们知道C语言的鲜为人知的特征之一,那么编写这样的宏实际上就是孩子们的游戏。 C在C语言中,有一个#指令,也称为“字符串化运算符”,它具有这种魔力。基本上,#指令将其参数转换为字符串。瞧!剩下的事情很简单。因此,上述程序可以进行如下修改。

#define PRINT(x) (#x)
int main()
{ 
  printf("%s",PRINT(x));
  return 0;
}

现在,如果输入为PRINT(x) ,它将输出x 。实际上,如果输入是PRINT(geeks) ,它将输出geeks

您可能会发现从微软这个指令的详细信息门户在这里

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。