Совет, данный в Ян '* ответ , является «в целом правильным». То есть значение __FILE__
- это имя текущего исходного файла, когда используется макрос, а не когда макрос определен. Однако это не совсем правильно - и вот контрпример:
$ cat x.h
static void helper(void)
{
printf("%s:%d helper\n", __FILE__, __LINE__);
}
$ cat x.c
#include <stdio.h>
#include "x.h"
int main(void)
{
helper();
printf("%s:%d\n", __FILE__, __LINE__);
return 0;
}
$ make x
cc -Wall -Wextra -std=c99 -g x.c -o x
$ ./x
x.h:3 helper
x.c:7
$
Это надуманный пример; в C вы очень редко помещаете реальный код в заголовок, как я делал здесь - если только вы не используете inline
функции. Но выходные данные показывают, что существуют обстоятельства, когда имя заголовка может быть правильным именем, которое __FILE__
расширяется до.