gpt4 book ai didi

c++ - 未声明的标识符但已声明

转载 作者:搜寻专家 更新时间:2023-10-31 01:43:45 27 4
gpt4 key购买 nike

我写了这段代码:

#define HIDE __attribute__((visibility("hidden")))

HIDE int main(){
int x = 10;
int z = 5;
int c;

c = call1(x,z);
}

HIDE int call1(int a,int b)
{
int r;
r = a+b;
return r;
}

但是当我尝试编译它时,我得到了这个错误:错误:使用未声明的标识符“call1”c=call1(x,z);

我已经看过这里但没有发现类似的问题。如果确实重要,我正在使用 Xcode 编译代码。

最佳答案

Undeclared identifier but is declared

不,不是。您的标识符是定义的,而不是声明的。这是一个常见的混淆来源。标识符的声明意味着给它一个唯一的签名,可以在下面的代码行中引用。定义就是赋予它一定的值(value)/实现。 定义 意味着以下代码的声明

至少必须在首次使用前看到标识符的完整声明。

就是说您可以简单地在 main() 之前为您的函数声明

HIDE int call1(int a,int b);

或者只是将您的代码更改为

HIDE int call1(int a,int b) {
int r;
r= a+b;
return r;
}

HIDE int main() {
int x = 10;
int z = 5;
int c;

c=call1(x,z);
}

并在 main() 之前放置定义(这实际上意味着声明)以对您的函数进行前向声明。

我要引用 current standards第 3.1 节在这里

3.1 Declarations and definitions [basic.def]

1 A declaration (Clause 7) may introduce one or more names into a translation unit or redeclare names introduced by previous declarations. If so, the declaration specifies the interpretation and attributes of these names. A declaration may also have effects including:
— a static assertion (Clause 7),
— controlling template instantiation (14.7.2),
— use of attributes (Clause 7), and
— nothing (in the case of an empty-declaration).

...

关于c++ - 未声明的标识符但已声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589816/

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