Примеры программ к Лабораторной работе 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__);
}