Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.
И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
Здравствуйте, Elifant, Вы писали:
E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.
Я знаю книжку по ACE, но она не про сабж, а про то, как там все сложно, и местами — как реализовано в именно ACE. (Дуглас Шмидт, Стивен Хьюстон, "Программирование сетевых приложений на С++).
Практическая полезность этой книжки для меня близка к нулю, но про сабж
E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
Да. Еще unsigned/signed char — тоже.
Здравствуйте, SergeMukhin, Вы писали:
E>>> гарантируется ли, что sizeof(char) == 1?
Kaa>> Да. Еще unsigned/signed char — тоже.
S> только это не в байтах она == 1, а в char !
В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Павел Кузнецов, Вы писали:
E>>>> гарантируется ли, что sizeof(char) == 1?
Kaa>>> Да. Еще unsigned/signed char — тоже.
S>> только это не в байтах она == 1, а в char !
ПК>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
да, да, конечно. я по привычке байт за 8 бит держу
Здравствуйте, SergeMukhin, Вы писали:
SM>Здравствуйте, Павел Кузнецов, Вы писали:
E>>>>> гарантируется ли, что sizeof(char) == 1?
Kaa>>>> Да. Еще unsigned/signed char — тоже.
S>>> только это не в байтах она == 1, а в char !
ПК>>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
SM>да, да, конечно. я по привычке байт за 8 бит держу
Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).
Здравствуйте, Elifant, Вы писали:
E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами. E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
Б. Керниган, Р. Пайк "Практика программирования" — достаточно интересная книженция...
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Шахтер, Вы писали:
Ш>>Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).
А>Ничего не понятно. Сколько char'ов запаковываются в 24-битное слово?
Один.
А>Где 16 байт — мусор?
В старшей части слова, в который запакован char.
Собственно говоря, это не столько особенность процессора, сколько компилятора.
Здравствуйте, Elifant, Вы писали:
E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
Да! Причём — по определению:
Размеры объектов в С++ выражаются в единицах размера char Таким образом, размер char по определению равен 1...
...По поводу размеров фундаментальных типов гарантируется следующее:
1==siziof(char)<=sizeof(short)<=...
Здравствуйте, Павел Кузнецов, Вы писали: ПК>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
Ни разу не слышал, что байт может быть не равен 8 битам
"Какие ваши доказатеЛства ?" (c) "Красная жара"
Здравствуйте, Forrest_Gump, Вы писали:
E>> И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
FG> Да! Причём — по определению:
FG>
FG> Размеры объектов в С++ выражаются в единицах размера char
FG> Таким образом, размер char по определению равен 1...
FG> ...По поводу размеров фундаментальных типов гарантируется следующее:
FG> 1==siziof(char)<=sizeof(short)<=...
Здравствуйте, Шахтер, Вы писали:
Ш>>>Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор). А>>Ничего не понятно. Сколько char'ов запаковываются в 24-битное слово? Ш>Один. А>>Где 16 байт — мусор? Ш>В старшей части слова, в который запакован char.
А, т.е. это 16-битный padding...
Ш>Собственно говоря, это не столько особенность процессора, сколько компилятора.
Если я правильно понял, [signed/unsigned] char представляется 24-битным словом, в котором значащими оказываются только младшие 8 бит слова. При этом в int значащие — все 24 бита?..
Тогда это компилятор не C/C++, а какого-то более другого языка.
Здравствуйте, Шахтер, Вы писали:
А>>Тогда это компилятор не C/C++, а какого-то более другого языка.
Ш>Не угадали. C компилятор.
Это может быть компилятором C99, если в unsigned char значащие все 24 бита. А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так рассказали о представлении типов.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, Шахтер, Вы писали:
А>>>Тогда это компилятор не C/C++, а какого-то более другого языка.
Ш>>Не угадали. C компилятор.
А>Это может быть компилятором C99, если в unsigned char значащие все 24 бита. А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так рассказали о представлении типов.
Здравствуйте, Elifant, Вы писали:
E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами. E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
В архитектуре PDP байтом была конструкция переменной длины 1..64 бит.
Здравствуйте, Elifant, Вы писали:
E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.