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