如果__FILE__
宏位于.h
中,是否有关于如何展开它的说明?
如果我在foo.h
中定义
#define MYFILE __FILE__
并将其包含在
foo.c
#include "foo.h"
int main(){
printf("%s",MYFILE);
....
}
这个输出是
foo.h
还是foo.c
?(是的,我意识到这是一个愚蠢的例子)对不起,这个问题应该很简单。网络上的文档似乎有冲突。对于VS2008的价值,我想这是我所期望的。我只是想确认这是否是明确的行为。
最佳答案
yan中给出的建议是“一般正确的”。也就是说,__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__
扩展到的正确名称。关于c - __FILE__在.h中它解析为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5047597/