Примеры программ к Лабораторной работе N12. "Директивы препроцессора"
// doubincl.c - двойное включение заголовочного файла
#include <stdio.h>
#include "names.h"
#include "names.h" //непреднамеренное повторное включение
int main (){
names winner = {"Иван", "Иванов"};
printf("Победителем стал %s %s.\n", winner.first, winner.last);
return 0;
}
// names.h - защита от многократного включения
#ifndef NAMES_H_
#define NAMES_H_
//#pragma once
// константы
#define SLEN 32
// объявления структур
struct names_st
{
char first[SLEN];
char last[SLEN];
};
// определения типов
typedef struct names_st names;
// прототипы функций
void get_names(names *);
void show_naroes(const names *);
#endif
/* ifdef.c - использование условной компиляции */
#include <stdio.h>
#define JUST_CHECKING
#define LIMIT 4
int main(void)
{
int i;
int total = 0;
for (i = 1; i <= LIMIT; i++){
total += 2*i*i + 1;
#ifdef JUST_CHECKING
printf("i=%d, текущая сумма = %d\n", i, total);
#endif
}
printf("Итоговая сумма = %d\n", total);
return 0;
}
/* mac_arg.c - макросы с аргументами */
#include <stdio.h>
#define SQUARE(X) X*X
#define PR(X) printf ("Результат: %d.\n", X)
int main(void){
int x = 4;
int z;
printf ("x = %d\n", x);
z = SQUARE(x) ;
printf ("Вычисление SQUARE(x): ");
PR(z);
z = SQUARE(2);
printf ("Вычисление SQUARE(2): ");
PR(z);
printf ("Вычисление SQUARE(x+2): ") ;
PR(SQUARE(x+2));
printf("Вычисление 100/SQUARE(2) : ") ;
PR(100/SQUARE(2));
printf("x = %d.\n", x);
printf ("Вычисление SQUARE(++x): ");
PR(SQUARE(++x));
printf("После инкремента x = %x.\n", x);
return 0;
}
// predef.c -- предопределенные идентификаторы
#include <stdio.h>
#define TTTT 5
#if TTTT != 5
#error Неправильная константа
#endif
void why_me();
int main(){
#line 500 "test.c"
printf ("Файл: %s.\n", __FILE__);
printf("Дата: %s.\n", __DATE__);
printf("Время: %s.\n", __TIME__);
printf ("Версия: %ld.\n", __STDC_VERSION__);
printf("Это строка %d.\n", __LINE__);
printf("Это функция %s\n", __func__);
why_me();
return 0;
}
void why_me(){
printf("Это функция %s\n", __func__);
printf("Это строка %d.\n", __LINE__);
}