gpt4 book ai didi

c - 关于C中static关键字的两个问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:54 25 4
gpt4 key购买 nike

我有这段代码:

int foo1(void); //line a

int foo2(void) {
return foo1();
}

int foo1(void) { //line b
return 99;
}

如果我想声明函数 foo1 是静态的,我应该把关键字 static 放在 a 行还是 b 行?有区别吗?

另外说我在上面文件中使用 foo1 的另一个文件中有以下代码:

static int foo1(void);

int main(void) {
return foo1();
}

尽管我将 static 放在声明行中,但代码仍然可以按预期编译和工作。但它给出了一条警告,指出“foo1”已使用但从未定义 - 如果未定义,为什么代码仍然有效?

编辑:对不起,我没说清楚,对于第二个问题,第一个文件中定义它的 foo1 没有声明为静态,但我在第二个文件中声明为静态。

最佳答案

第一种情况,你需要在a行和b行都加上static。 C 中的静态函数具有内部链接,这意味着它们仅在同一文件中可见。所以对于声明和定义,你需要把 static 这样编译器就知道这个函数有内部链接。如果你不把 static 放在 a 行,你会得到一些编译错误。

在第二种情况下,由于foo1是一个静态函数,它必须和main定义在同一个文件中。您只提出了没有实际定义的前向声明(forward declaration)。即使编译正常,程序也不会链接,因为 foo1 没有定义。

关于c - 关于C中static关键字的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977854/

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