未声明的标识符,但已声明

时间:2014-07-05 19:21:55

标签: c++

我写了这段代码:

#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编译代码。

1 个答案:

答案 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条)和
    - 没有(在空声明的情况下)。

     

...

相关问题