c - 当 MACRO 不包含任何内存位置时,为什么 sizeof(MACRO) 给出 4 个字节的输出?

标签 c macros c-preprocessor

下面是小程序:

#include <stdio.h>
#define max 'A'

int main()
{
    char a;
    printf("max[%d] sizeof[max][%ld]\n", max, sizeof(max));
    a = max;
    printf("a[%d] sizeof[a][%ld]\n", a, sizeof(a));
    return 0;
}

程序的输出是:

max[65] sizeof[max][4]
a[65] sizeof[a][1]

谁能帮我理解为什么 sizeof(max) 是 4 个字节?

最佳答案

sizeof(max) 被预处理器替换为 sizeof('A')sizeof('A')sizeof(int) 相同,后者在您的平台上为 4。

为避免疑义,'A' 是 C 中的 int 常量不是 字符。 (请注意,在 C++ 中,'A' 是一个 char literal,而 sizeof(char) 固定为 1按照标准。)

关于c - 当 MACRO 不包含任何内存位置时,为什么 sizeof(MACRO) 给出 4 个字节的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50333520/

相关文章:

c - 中国人民银行 : get hash from an element

python - ctypes.ArgumentError : Don't know how to convert parameter

c - 在 C 中包含动态字符数组的结构

c - 大端交换宏 "uswap"导致意外错误

c - 在宏中提取函数名称

c - 我的 C 代码有什么问题?

debugging - 无需调试即可启动

clojure - Clojure 宏生成的代码中的反射警告

c - 如何删除这些 C 宏之间的重复?

c-preprocessor - C99 预处理器图灵完整吗?