О переносимости кода и кроссплатформенном программном обеспечении
3
Кроме того, если надо получить переносимый код, не следует
ориентироваться на ожидаемые размеры данных. При этом стоит
учитывать различия между 16- и 32-разрядной средой разработки.
Известно, что размер слова в 16-разрядном процессоре равен 16 бит =
= 2 байта, а в 32-разрядном — 32 бита = 4 байта. Размер слова часто
совпадает с размером данных типа int. Код, созданный в предполо-
жении, что переменные типа int являются, например, 16-разрядными,
не будет корректно работать после переноса его в 32-разрядную сре-
ду. Чтобы избежать жесткой привязки к размеру типа, следует внача-
ле определить размер типа в байтах с помощью оператора
sizeof().
Например:
fread(&j, sizeof(int),1, stream);
Такой код является более предпочтительным, так как это выра-
жение заносит значение типа int в дисковый файл и будет работать в
любой среде программирования.
Для того чтобы создать программу под разные платформы, в об-
щем случае требуется набор компиляторов (и компоновщиков) под
разные платформы, каждый из которых способен компилировать (и
компоновать) под платформу, на которую он установлен, а также
набор библиотек под разные платформы. При этом для выбора ком-
пилируемого кода можно использовать директивы условной компи-
ляции. Так, например, при использовании компилятора С++ из GCC
можно использовать Common Predefined Macros _GNUG_, который, в
свою очередь, можно применять для выбора компилируемого кода на
этапе работы препроцессора:
#ifndef _GNUG_
…..код для компилятора GCC …
#else
….код для компилятора MSVS…
#endif
Использование кроссплатформенного программного обеспе-
чения.
Для повышения возможностей переносимости может быть
использовано кроссплатформенное обеспечение, позволяющее рабо-
тать более чем на одной платформе. Использование кроссплатфор-
менных средств разработки (компиляторов, библиотек и фреймвор-
ков) является одним из путей повышения переносимости программ-
ного кода.
Процесс сборки приложения под платформу, отличную от плат-
формы, на которой запущены компилятор и компоновщик, называет-
ся кросскомпиляцией.
Для получения объектного кода программы программистами ис-
пользуются трансляторы, которые, в свою очередь, могут быть ком-