如果__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/

10-11 17:50