gpt4 book ai didi

c - 当包含带有静态声明的 header 时会发生什么?

转载 作者:行者123 更新时间:2023-12-01 13:42:09 25 4
gpt4 key购买 nike

例如,假设我有 2 个头文件。

啊.h

#include <stdio.h>
static __inline foo()
{
// do something
}

然后 a.h 文件被包含到 b.h 中:

b.h

#include "a.h"
void bar();

对应的b.cpp文件:

BC

#include "b.h"
void bar()
{
foo();
}

ma​​in.c

#include "b.h"
void main()
{
bar();
}
  1. foo() 是否会被内联到 b.c 文件中?
  2. foo()(静态)是否会在 main.c 文件中可见,因为它是通过 b.h 文件包含的,或者它将是只对 b.c 可见? (我猜它不会是可见的,因为它们不在同一个翻译单元中)。

最佳答案

foo()bmain 中都可见。编译器在预处理器完成工作后查看文件。

main.c 在预处理器步骤之后:

<all the stuff from stdio.h>
static __inline foo()
{
// do something
}
void bar();
void main()
{
bar();
}

main.c 中删除 foo() 的一种方法是将 a.hb.h 中移走到 b.c:

修改后的b.h:

void bar();

修改后的b.c:

#include "a.h"
#include "b.h"
void bar()
{
foo();
}

关于c - 当包含带有静态声明的 header 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39140598/

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