Реферат: Препроцессор языка C.
начинаются с символа подчеркивания. Поэтому опция '-ansi' запрещает
определение этих символов.
Это приводит к тому, что опция '-ansi' становится бесполезной, так как
большое количество программ зависит от нестандартных заранее определенных
символов. Даже системные подключамые файлы проверяют их значения и
генерируют неправильные объявления в случае если требуемые имена не
определены. В результате очень мало программ компилируется с опцией '-ansi'.
Что же нужно сделать в ANSI C программе для того, чтобы проверить тип
используемого компьютера?
Для этой цели GNU C предоставляет параллельную серию символов, имена
которых состоят из обычных символов с добавлением строки '__' с начала и
с конца. Таким образом символ '__vax__' используется на системах Vax, и
так далее.
Набор нестандартных заранее определенных символов в GNU C препроцессоре
изменяется (при компиляции самого компилятора) с помощью макроса
'CPP_PREDEFINES', которым является строка, состоящая из опций '-D',
разделенных пробелами. Например, на системе Sun 3 используется следующее
макроопределение:
#define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k"
Этот макрос обычно указывается в файле 'tm.h'.
4.4. Стрингификация
"Стрингификация" означает преобразование фрагмента кода в строковую
константу, которая содержит текст этого фрагмента кода. Например, в результате
стрингификации 'foo (z)' получается '"foo (z)"'.
В С препроцессоре, стрингификация является опцией, используемой при
замене аргументов в макросе макроопределением. При появлении имени аргумента
в теле макроопределения, символ '#' перед именем аргумента указывает на
стрингификацию соответствующего аргумента при его подстановке в этом месте
макроопределения. Этот же аргумент может быть заменен в другом месте