Инструкция выполняется, только если определен символ:
#ifdef
инструкция (отладочные сообщения)
#endif
Определить символ можно с помощью директивы
#define
Или с помощью ключа компилятора -D:
C:\MinGW\bin>gcc d:/work/prog.c -D DEBUG
Пример программы:
#define DEBUG
#include "stdio.h"
int max_elem(int* a, int n)
// Находит индекс максимального элемента в массиве a из n элементов
{
int ind; // текущий индекс максимального элемента
int m; // текущее значение максимального элемента
int i;
m=a[0];
for(i=1; i<n; i++)
{ if(a[i]>m)
{ ind = i;
m=a[i];
#ifdef DEBUG
printf("i = %i, ind= %i, max = %i\n", i, ind, m);
#endif
}
return ind;
}
void print_mas(int* a, int n)
// Печатает массив (для отладки)
{
int i;
for(i=0; i<n; i++)
printf("%5i", a[i]);
printf("\n");
}
int main()
{
int a1[]={0, 2, 3, 5, 1, 4};
int a2[]={0, 2, 3, 5, 1, 7, 7, 7};
int a3[]={8, 2, 3, 5, 1, 4, 7, 3};
int i;
printf("\nTEST 1\n");
print_mas(a1, 6);
i = max_elem(a1, 6);
printf("maximum = %i, nomer = %i\n", a1[i], i);
if (i==3) printf("Test passed\n\n");
else printf("Test fail\n\n");
printf("\nTEST 2\n");
print_mas(a2, 8);
i = max_elem(a2, 8);
printf("maximum = %i, nomer = %i\n", a2[i], i);
if (i==5) printf("Test passed\n\n");
else printf("Test fail\n\n");
printf("\nTEST 1\n");
print_mas(a3, 8);
i = max_elem(a3, 8);
printf("maximum = %i, nomer = %i\n", a3[i], i);
if (i==0) printf("Test passed\n\n");
else printf("Test fail\n\n");
}
Библиотеки С.
stdio – форматированная печать
printf(формат, аргументы для печати);
Формат состоит из обычных символов, непосредственно выводимых в поток, и спецификаций преобразований, для вывода аргументов печати.
Спецификация преобразований начинается с «%» и, в общем случае, содержит:
флаг;
минимальная ширина поля; точка
максимальное число выводимых символов (точность);
модификатор знака;
обязательное поле – спецификатор преобразования