Смотря какой смысл вкладывается в выражение «64-разрядная машина». Обычно имеют в виду машину с sizeof(void*) == 8.
Теоретически можно заставить x86 давать sizeof(void*) == 8, юзая сегменты. Обычно всё-таки «64-разрядная машина» это когда регистры 64-разрядные, то есть они не тормозят сильнее, чем при обращении с 32-разрядными (ну или 128-разрядными). Но вот изнутри С всякими sizeof это никак не определишь, всё же I86_64 это несколько снаружи.
Ты скажи, тебе для каких платформ, и сколько компиляторов хочешь охватить? Хватит ли тебе UNIX-like? А может еще и DSP хочешь? Там запросто можно sizeof(char) == 4 получить.
Да вы правы — char это минимально адресуемый объект.(ячейка т.е «байт») . Sizeof(char) всегда равен 1 . Но засада в том что в дайт Char_bits>=8 тоже всегда(2.2.4.2 ANSI C)Соответственно может быть. Так что char_bits --32 => что соответствует 4м байтам на x86
На DSP как раз sizeof(char) будет 1 (и я так понял по другому и не может быть) только вот смысл этого может быть какой угодно,
так как sizeof возвращает результат в char'ах.
Без точных сведений, переданных компилеру - никак.