Почему sizeof (MACRO) выдает 4 байта, когда MACRO не содержит места в памяти? - PullRequest
0 голосов
/ 14 мая 2018

Ниже приведена небольшая программа:

#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]

Может кто-нибудь помочь мне понять, почему размер (max) составляет 4 байта

1 Ответ

0 голосов
/ 14 мая 2018

sizeof(max) заменяется препроцессором на sizeof('A'). sizeof('A') - это то же самое, что и sizeof(int), а на вашей платформе последний равен 4.

Во избежание сомнений 'A' - это int константа в C, , а не a char. (Обратите внимание, что в C ++ 'A' это char литерал , а sizeof(char) по стандарту фиксируется на 1.)

...