Задачи по языку С

       

К сожалению, не все сказанное


К сожалению, не все сказанное выше справедливо для систем программирования Borland. Принципиальное отличие в работе препроцессора Borland состоит в том, что аргументы НЕ подставляются внутрь строковой константы, т.е., между двойными кавычками. Как следствие этого - мы не можем задавать формат вывода фактическим параметром макроопределения.

Мы в своей работе в файле defs.h оставили только возможность вывода десятичных целых, так как именно такой вывод происходит в подавляющем большинстве следующих примеров. В нескольких же примерах Главы 8, где требуется вывод по спецификациям формата %s и %c, мы непосредственно обращались к функции printf. Содержимое "нашего" файла defs.h выглядит следующим образом:
#include <stdio.h> #define PR(f,value) printf("%d\t",value) #define NL putchar('\n') #define PRINT1(f,x1) {PR(f,x1);NL;} #define PRINT2(f,x1,x2) {PR(f,x1);PRINT1(f,x2)} #define PRINT3(f,x1,x2,x3) {PR(f,x1);PRINT2(f,x2,x3)} #define PRINT4(f,x1,x2,x3,x4) {PR(f,x1);PRINT3(f,x2,x3,x4)}
Параметр f в наших макроопределениях не используется, но мы сохранили его для совместимости с текстами оригинала.

Обратите также внимание на то, что ряд макроопределений мы взяли в фигурные скобки. В ряде случаев в примерах м-ра Фьюера макросы PRINTx() используются как один оператор, что может привести к результатам, отличным от предсказываемых.



Содержание раздела