Почему char — 1 байт, а символьный литерал ('A') — 4?
А теперь скажу правильный ответ.
В Си символьный литерал имеет тип int и потому его sizeof 4 байта.
В Си++ у него тип char и 1 байт. Потому те, кто создавал CPP-файл, проблемы не видели. Очевидно, связано с перегрузкой функций: как-то не хочется, чтобы в foo('A') вызывалась версия для int.
#include <stdio.h>

int main()
{
    int sz = sizeof('A');  // латинское
    printf("sz = %d\n", sz);
    return 0;
}
Си: 4
Си++: 1

При написании char test='A' на стеке будет 1 байт (+выравнивание). Здесь Си, грубо говоря, проводит преобразование типа — прямо при компиляции. Если написать char test=L'Й', сообщит, что преобразование при компиляции ushort→char обрежет результат с 1049 до 25.
А нечего русские буквы в char запихивать
In (1), if c-char is not a numeric character sequence and is not representable as a single byte in the execution character set, the character literal is conditionally supported, has type int and implementation-defined value.

https://en.cppreference.com/w/cpp/language/charact...