Иллюстрированный самоучитель по практике программирования

Организация программы

Одна-единственная строка с унифицированным текстом (но на самом деле столь же информативным) была бы гораздо удобнее, проще и переносимее:

char *astring = "convert to local text format";

Для этой строки никаких условий не нужно, она будет выглядеть одинаково во всех системах.

Смешивание управляющей логики времени компиляции (определяемой выражениями <<ifdef) и времени исполнения приводит к еще более трудно воспринимаемому коду:

Иллюстрированный самоучитель по практике программирования › Переносимость › Организация программы

Даже будучи явно безопасной, условная компиляция может быть заменена более простым кодом. Например, tfifdef часто используют для управления отладочным кодом:

? ftifdef DEBUG
? printf(…);
? tfendif

Однако обычное выражение if с константой в условии может делать то же самое:

Иллюстрированный самоучитель по практике программирования › Переносимость › Организация программы

Если DEBUG есть ноль, то большинство компиляторов не сгенерируют для приведенного фрагмента никакого кода, но при этом они еще и проверят синтаксис. Секция с #ifdef, наоборот, может содержать синтаксические ошибки, которые сорвут компиляцию, как только соответствующее условие #ifdef окажется выполнено.

Иногда условия компиляции содержат большие блоки кода:

tfifdef notdef /* неопределенный символ */ ttendif

…или:

#if 0
tfendif

В таком случае этот код лучше вынести в отдельные файлы, которые будут подключаться при компиляции при соблюдении определенных условий. К этой теме мы еще вернемся в следующем разделе.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.