Переносимость программ
От: Elifant  
Дата: 26.01.04 18:22
Оценка:
Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.
И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?
Re: Переносимость программ
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 26.01.04 18:37
Оценка:
Здравствуйте, Elifant, Вы писали:

E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

Я знаю книжку по ACE, но она не про сабж, а про то, как там все сложно, и местами — как реализовано в именно ACE. (Дуглас Шмидт, Стивен Хьюстон, "Программирование сетевых приложений на С++).

Практическая полезность этой книжки для меня близка к нулю, но про сабж

E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?

Да. Еще unsigned/signed char — тоже.
Алексей Кирдин
Re[2]: Переносимость программ
От: SergeMukhin Россия  
Дата: 26.01.04 19:34
Оценка: 5 (2)
Здравствуйте, Kaa, Вы писали:

E>>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?

Kaa>Да. Еще unsigned/signed char — тоже.

только это не в байтах она == 1, а в char !
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[3]: Переносимость программ
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 26.01.04 19:36
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

SM>только это не в байтах она == 1, а в char !

Спасибо, я в курсе. В вопросе размерность не фигурировала.
Алексей Кирдин
Re[3]: Переносимость программ
От: Павел Кузнецов  
Дата: 27.01.04 09:13
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

E>>> гарантируется ли, что sizeof(char) == 1?


Kaa>> Да. Еще unsigned/signed char — тоже.


S> только это не в байтах она == 1, а в char !


В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Переносимость программ
От: SergeMukhin Россия  
Дата: 27.01.04 09:50
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

E>>>> гарантируется ли, что sizeof(char) == 1?


Kaa>>> Да. Еще unsigned/signed char — тоже.


S>> только это не в байтах она == 1, а в char !


ПК>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).


да, да, конечно. я по привычке байт за 8 бит держу
... << RSDN@Home 1.1.0 stable >>
---
С уважением,
Сергей Мухин
Re[5]: Переносимость программ
От: Шахтер Интернет  
Дата: 28.01.04 01:43
Оценка:
Здравствуйте, SergeMukhin, Вы писали:

SM>Здравствуйте, Павел Кузнецов, Вы писали:


E>>>>> гарантируется ли, что sizeof(char) == 1?


Kaa>>>> Да. Еще unsigned/signed char — тоже.


S>>> только это не в байтах она == 1, а в char !


ПК>>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).


SM>да, да, конечно. я по привычке байт за 8 бит держу


Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[6]: Переносимость программ
От: Аноним  
Дата: 28.01.04 10:05
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).


Ничего не понятно. Сколько char'ов запаковываются в 24-битное слово? Где 16 байт — мусор?
Re: Переносимость программ
От: Selectron Россия  
Дата: 28.01.04 10:15
Оценка:
Здравствуйте, Elifant, Вы писали:

E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?

Б. Керниган, Р. Пайк "Практика программирования" — достаточно интересная книженция...
О заработке в Интернет. Практический опыт.
Re[7]: Переносимость программ
От: Шахтер Интернет  
Дата: 29.01.04 01:54
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Шахтер, Вы писали:


Ш>>Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).


А>Ничего не понятно. Сколько char'ов запаковываются в 24-битное слово?


Один.

А>Где 16 байт — мусор?


В старшей части слова, в который запакован char.

Собственно говоря, это не столько особенность процессора, сколько компилятора.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Переносимость программ
От: Forrest_Gump  
Дата: 29.01.04 02:22
Оценка:
Здравствуйте, Elifant, Вы писали:

E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?

Да! Причём — по определению:


Размеры объектов в С++ выражаются в единицах размера char Таким образом, размер char по определению равен 1...
...По поводу размеров фундаментальных типов гарантируется следующее:
1==siziof(char)<=sizeof(short)<=...

Б.Страуструпп "Язык программирования С++" 3-е издание, стр. 113
Re[4]: Переносимость программ
От: Forrest_Gump  
Дата: 29.01.04 02:25
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>В байтах. sizeof всегда в байтах. Но не обязательно в восьмибитных (aka октет).
Ни разу не слышал, что байт может быть не равен 8 битам
"Какие ваши доказатеЛства ?" (c) "Красная жара"
Re[2]: Переносимость программ
От: Павел Кузнецов  
Дата: 29.01.04 08:50
Оценка:
Здравствуйте, Forrest_Gump, Вы писали:

E>> И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?


FG> Да! Причём — по определению:


FG>

FG> Размеры объектов в С++ выражаются в единицах размера char
FG> Таким образом, размер char по определению равен 1...
FG> ...По поводу размеров фундаментальных типов гарантируется следующее:
FG> 1==siziof(char)<=sizeof(short)<=...

FG> Б.Страуструпп "Язык программирования С++" 3-е издание, стр. 113

По определению (стандарты языков C и C++) sizeof возвращает результат
в байтах.
C:

6.5.3.4
2 The sizeof operator yields the size (in bytes) of its operand,
which may be an expression or the parenthesized name of a type.

C++:

5.3.3
1 The sizeof operator yields the number of bytes in the object
representation of its operand.


Тем не менее, для char, signed char и unsigned char, sizeof, действительно, равен 1:
C:

6.5.3.4
3 When applied to an operand that has type char, unsigned char,
or signed char, (or a qualified version thereof) the result is 1.

C++:

5.3.3
1 <...>sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1

Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: Переносимость программ
От: Павел Кузнецов  
Дата: 29.01.04 08:58
Оценка:
Здравствуйте, Forrest_Gump, Вы писали:

FG> Ни разу не слышал, что байт может быть не равен 8 битам


Например:
http://catb.org/~esr/jargon/html/B/byte.html
http://wombat.doc.ic.ac.uk/foldoc/foldoc.cgi?byte
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Переносимость программ
От: Аноним  
Дата: 29.01.04 09:45
Оценка: +1
Здравствуйте, Шахтер, Вы писали:

Ш>>>Я знаю процессор, у которого char запаковывается в 24 битное слово (старшие 16 байт -- мусор).

А>>Ничего не понятно. Сколько char'ов запаковываются в 24-битное слово?
Ш>Один.
А>>Где 16 байт — мусор?
Ш>В старшей части слова, в который запакован char.

А, т.е. это 16-битный padding...

Ш>Собственно говоря, это не столько особенность процессора, сколько компилятора.


Если я правильно понял, [signed/unsigned] char представляется 24-битным словом, в котором значащими оказываются только младшие 8 бит слова. При этом в int значащие — все 24 бита?..

Тогда это компилятор не C/C++, а какого-то более другого языка.
Re[9]: Переносимость программ
От: Шахтер Интернет  
Дата: 30.01.04 00:51
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Тогда это компилятор не C/C++, а какого-то более другого языка.


Не угадали. C компилятор.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[10]: Переносимость программ
От: Аноним  
Дата: 30.01.04 09:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

А>>Тогда это компилятор не C/C++, а какого-то более другого языка.


Ш>Не угадали. C компилятор.


Это может быть компилятором C99, если в unsigned char значащие все 24 бита. А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так рассказали о представлении типов.
Re[11]: Переносимость программ
От: Шахтер Интернет  
Дата: 31.01.04 00:47
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Шахтер, Вы писали:


А>>>Тогда это компилятор не C/C++, а какого-то более другого языка.


Ш>>Не угадали. C компилятор.


А>Это может быть компилятором C99, если в unsigned char значащие все 24 бита. А иначе это не C компилятор. Ну, или, конечно, Вы что-то не так рассказали о представлении типов.


Это почему?
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Переносимость программ
От: c-smile Канада http://terrainformatica.com
Дата: 31.01.04 02:20
Оценка:
Здравствуйте, Elifant, Вы писали:

E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.

E>И заодно задам вопрос по теме: гарантируется ли, что sizeof(char) == 1?


В архитектуре PDP байтом была конструкция переменной длины 1..64 бит.

Re: Переносимость программ
От: leper Россия  
Дата: 31.01.04 07:03
Оценка: +1
Здравствуйте, Elifant, Вы писали:

E>Посоветуйте, пожалуйста, статьи по написанию переносимых программ с использованием С++. Интересует переносимость как между компиляторами, так и между платформами.


Mozilla C++ portability guide

What follows is a set of rules, guidelines, and tips that we have found to be useful in making C++ code portable across many machines and compilers.

... << RSDN@Home 1.1.2 stable >>
Think for yourself. Question authory.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.