33 lines
1.4 KiB
C
33 lines
1.4 KiB
C
|
#include <stdio.h>
|
|||
|
#include <math.h>
|
|||
|
#define PR(X, ...) printf("Message " #X ": " __VA_ARGS__)
|
|||
|
#define DEBUGPRINT fprintf (stderr, "debug in %d line func: %s\n", __LINE__, __func__)
|
|||
|
|
|||
|
int main(void)
|
|||
|
{
|
|||
|
DEBUGPRINT;
|
|||
|
printf("File: %s\n", __FILE__);
|
|||
|
#line 100 "help.c"
|
|||
|
DEBUGPRINT;
|
|||
|
#line 200
|
|||
|
DEBUGPRINT;
|
|||
|
|
|||
|
printf("File: %s\n", __FILE__);
|
|||
|
#ifndef __APPLE__
|
|||
|
//~ #error This code work only in MacOs
|
|||
|
#endif
|
|||
|
/*
|
|||
|
* Единственное применение, которое я могу придумать, — это приведение номеров строк в порядок
|
|||
|
* после длинной серии многострочных макросов.
|
|||
|
*
|
|||
|
В основном он используется для предоставления имен файлов и номеров строк исходного файла,
|
|||
|
из которого был создан файл C (будь то заголовок или реализация).
|
|||
|
Учитывая это, компилятор выдаст диагностику, которая намекает на исходный файл, а не на сгенерированный файл.
|
|||
|
|
|||
|
Препроцессоры также используют это для указания на включенные заголовки в предварительно обработанном файле,
|
|||
|
в котором они расширены.
|
|||
|
*/
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|