LINUX.ORG.RU

[c++] платформозависимый код

 


0

2

Всем известно, что один и тот же код на x86 и на arm может работать по разному. Где можно почитать про тонкости с/c++, с которыми надо быть осторожнее при многоплатформеном программирование, желательно с примерами. Должны же быть такие книги?

★★★★★

Ответ на: комментарий от namezys

Не всегда все очевидно, не всегда есть знания. Вот и интересно с чего начать их получать.

Dudraug ★★★★★
() автор топика

Из запомнившихся мне правил только одно (наверное в остальном писал и без того нормально): не пытаться получить данные из сырого буфера с помощью смещения и приведения типа:

char const *buf;
int value=*(int*)(buf+3);

А испольовать для этого memcpy.

staseg ★★★★★
()
Ответ на: комментарий от anon_666

- на арме нельзя читать int по некратному адресу

Для плюсов неактуально, да и для C компилятор вроде все выравнивает.

Kosyak ★★★★
()
Ответ на: комментарий от anon_666

второе означает, что нельзя в ручную распределять объекты в выделенной структуре

namezys ★★★★
()
Ответ на: комментарий от Kosyak

>Другой вопрос, нужен ли такой код в C++?

В реализации сетевых протоколов от этого все равно не уйти.

staseg ★★★★★
()
Ответ на: комментарий от Kosyak

третий вопрос, а нужен ли C++ вообще?
хоть тема и с тегом [С++], автор спрашивает про оба языка.
и, да, __attribute__((packed)) еще никто не отменял.
если автору потребуется реализовывать свой протокол или формат хранения данных - даже в С++ придется быть предельно осторожным.

можно посоветовать поискать по ключевым словам fix portability всякие баги.

основные, конечно:
1) unaligned access
2) endianness
3) int, long, void *, size_t, off_t sizes
4) integer types overflow
5) implicit type conversion
6) strings encoding
7) address arithmetic
больше не вспомню всего того, что приходилось проверять и фиксить.

xydo ★★
()
Ответ на: комментарий от xydo

тонкости в том, что на C++ написать платформонезависимый(не системонезависимый, типа linux/windows на x86) код нихрена практически нельзя. А если и можно, если постараться, то не нужно.

Love5an
()
Ответ на: комментарий от Love5an

На чистом Си это несколько легче, но тоже не нужно, если пишется не ядро ОС под 40 платформ.

Love5an
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.