我正在研究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
的数据类型是如何声明的。
答案 0 :(得分:2)
宏纯粹是文本替换和扩展。它们与变量类型或内存无关。
当您说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);
}
宏扩展与内存无关。它只是执行简单搜索替换的预处理器。
另请注意,强烈建议在扩展中的括号中包装宏参数,以便在调用宏时可以使用表达式。即这会更好:
#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));\
}