我刚刚在某处找到了代码:
#include"stdio.h"
typedef struct st
{
int num;
char c;
int abc;
} Str, *pStr;
#define MyStr(Dcn) Str(Dcn)
int main()
{
Str Str1;
MyStr(Dcn);
return 0;
}
请告诉#define这里的含义是什么?因为它没有给出任何编译问题。因此,如果我将#define
某些内容用于“带括号的结构”,那么会发生什么?
此处Dcn
可以是任何不带引号的内容。当我使用数字而不是它显示编译错误。
答案 0 :(得分:4)
这定义了Str
的别名。它相当于
int main()
{
Str Str1;
Str(Dcn);
return 0;
}
其中只是声明Dcn
类型的变量Str
。
答案 1 :(得分:0)
它是一个类似函数的宏,它被扩展到右侧,并且替换了参数。
一个经典的例子就是计算最多两个值:
#define MAX(a, b) ((a) > (b) ? a : b)
你可以像这样使用它:
int hello = 12, there = 47;
int what = MAX(hello, there);
第二行将扩展为:
int what = ((12) > (47) ? 12 : 47);
换句话说,what
将是47
。请注意,此宏会多次评估其参数,如果存在副作用,这可能会有害。
从C99开始,您也可以variadic preprocessor macros。
您显示的代码将扩展为:
Str Str1;
Str(Dcn); /* This is the macro-expansion. */