gpt4 book ai didi

c - __FILE__ 在 .h 中它解析为什么

转载 作者:太空狗 更新时间:2023-10-29 16:37:15 25 4
gpt4 key购买 nike

__FILE__ 宏如果在 .h 中,是否有关于如何展开的规范?

如果我在foo.h中定义

#define MYFILE __FILE__

并将其包含在foo.c

#include "foo.h"

int main(){
printf("%s",MYFILE);
....
}

这个输出是 foo.h 还是 foo.c? (是的,我意识到这是一个愚蠢的例子)

抱歉,这应该是一个简单的问题。网络上的文档似乎相互矛盾。对于它的值(value),VS2008 以 foo.c 的形式返回,这正是我所期望的......我认为。我只是想确认这是否是已定义的行为。

最佳答案

yan中给出的建议的 answer是“大体上正确的”。即__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 中,您很少像我在这里那样将实际代码放入 header 中 — 除非您使用 inline 函数。但是输出显示在某些情况下, header 的名称可以是 __FILE__ 扩展到的正确名称。

关于c - __FILE__ 在 .h 中它解析为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com