Doodle 发表于 2020-11-17 22:40:58

求助一个宏定义问题

#include
#define A(x)x;x;x;x;x;x;x;x;x;x;
int main(void)
{
int n=0;
A(A(A(printf("M",n++))))
return 0;
}



为什么宏定义要用字母 A(x)x;x;x;x;x;x;x;x;x;x;
而不能用 A();;;;;;;;;;,一定要用字母https://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif

风过无痕1989 发表于 2020-11-18 00:35:25

      C语言中 #define 是提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。

       #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

(1)简单的宏定义:
#define <宏名>  <字符串>
例: #define PI 3.1415926

(2) 带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define   A(x)   x
    一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译, 宏替换是简单的替换。

其实,宏定义就像函数一样,有时带参数,有时不带参数: int main() 与 int main(void)
页: [1]
查看完整版本: 求助一个宏定义问题