C 中的宏数据类型声明
Macro datatype declaration in C
我正在研究 C 中的内存概念。
最近我遇到了这段代码:
#include <stdio.h>
#include <stdlib.h>
#define check(number) if(number<0){\
printf("The given number is negative %d \n",number);\
}\
else{\
printf("given number is positive and is : %d\n",number);\
}
int main()
{
check(6);
check(-6);
return 0;
}
在上面的代码中,我传递了值 6。这里我们没有为 number
声明任何数据类型,但即便如此,宏仍采用传递的默认数据类型。
那么,number
的数据类型究竟是如何在宏中定义的。
还有这个宏展开在内存中发生和存储的位置。
编辑:这里我以宏中的代码为例。我真正想知道的是如何声明 number
的数据类型。
PS : 这个问题可能很蹩脚,但我正在学习并且找不到答案。
宏是纯文本替换和扩展。它们与变量类型或内存无关。
当您输入 check(6)
时,预处理器会找到您的 check
宏,并 将 check(6)
文本替换为以下代码:
if(6<0){
printf("The given number is negative %d \n",6);
}
else{
printf("given number is positive and is : %d\n",6);
}
宏展开与内存无关。它只是预处理器执行简单的搜索替换。
另请注意,强烈建议在扩展中将宏参数括在括号中,这样您就可以在调用宏时使用表达式。 IE。这样会更好:
#define check(number) if((number) < 0) {\
printf("The given number is negative %d \n", (number));\
}\
else {\
printf("given number is positive and is : %d\n", (number));\
}
我正在研究 C 中的内存概念。 最近我遇到了这段代码:
#include <stdio.h>
#include <stdlib.h>
#define check(number) if(number<0){\
printf("The given number is negative %d \n",number);\
}\
else{\
printf("given number is positive and is : %d\n",number);\
}
int main()
{
check(6);
check(-6);
return 0;
}
在上面的代码中,我传递了值 6。这里我们没有为 number
声明任何数据类型,但即便如此,宏仍采用传递的默认数据类型。
那么,number
的数据类型究竟是如何在宏中定义的。
还有这个宏展开在内存中发生和存储的位置。
编辑:这里我以宏中的代码为例。我真正想知道的是如何声明 number
的数据类型。
PS : 这个问题可能很蹩脚,但我正在学习并且找不到答案。
宏是纯文本替换和扩展。它们与变量类型或内存无关。
当您输入 check(6)
时,预处理器会找到您的 check
宏,并 将 check(6)
文本替换为以下代码:
if(6<0){
printf("The given number is negative %d \n",6);
}
else{
printf("given number is positive and is : %d\n",6);
}
宏展开与内存无关。它只是预处理器执行简单的搜索替换。
另请注意,强烈建议在扩展中将宏参数括在括号中,这样您就可以在调用宏时使用表达式。 IE。这样会更好:
#define check(number) if((number) < 0) {\
printf("The given number is negative %d \n", (number));\
}\
else {\
printf("given number is positive and is : %d\n", (number));\
}