我写了这段代码:
#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编译代码。
答案 0 :(得分:3)
未声明的标识符,但声明为
不,不是。您的标识符是已定义,而不是已声明。这是混淆的常见原因。标识符声明意味着为其提供可在以下代码行中引用的唯一签名。定义意味着赋予它一定的价值/实施。 定义暗示声明以获取以下代码。
首次使用前必须至少看到标识符完整声明。
那就是说你可以在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);
}
并将{em>定义(实际上暗示声明)放在main()
之前,为你的函数提供前向声明。
我将在这里引用current standards 3.1节
3.1声明和定义[basic.def]
1声明(第7条)可以将一个或多个名称引入翻译单元或重新声明名称 由先前的声明引入。如果是这样,该声明就具体说明了这些解释和属性 名。声明也可能有以下影响,包括:
- 静态断言(第7条),
- 控制模板实例化(14.7.2),
- 使用属性(第7条)和
- 没有(在空声明的情况下)。...