C中的宏数据类型声明

时间:2015-08-04 18:12:52

标签: c macros

我正在研究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:问题可能很蹩脚但我正在学习而无法找到答案。

1 个答案:

答案 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));\
                      }