C 的功能声明

Function Declaration in C++

本文关键字:声明 功能      更新时间:2023-10-16

我在CPP中具有以下代码。

//My code
#include<iostream>
using namespace std;
int main()
{
    int a;
    int display();
    int printfun(display());// Function prototype
    printfun(9);//Function calling
    return 0;
}
int printfun(int x)
{
    cout<<"Welcome inside the function-"<<x<<endl;
}
int display()
{
    cout<<"Welcome inside the Display"<<endl;
    return 5;
}

汇编后,它会引发错误" line8:'printfun'不能用作函数"。

但是,当我在显示功能中进行printFun调用时,相同的代码可以很好地工作。

#include<iostream>
using namespace std;
int main()
{
    int a;
    int display();
    int printfun(display());// Function prototype
        return 0;
}
int printfun(int x)
{
    cout<<"Welcome inside the function-"<<x<<endl;
}
int display()
{
    printfun(9); // Function call
    cout<<"Welcome inside the Display"<<endl;
    return 5;

}

任何人都可以解释此背后的原因吗?

int printfun(display());// Function prototype

这不是功能原型。这是一个可变声明,等效于:

int printfun = display();

函数原型可以在main()内完成,但是将它们放在源文件的顶部更为正常。

#include <iostream>
using namespace std;
// Function prototypes.
int display();
int printfun(int x);    
int main()
{
    int a;
    printfun(9);  // Function call.
    return 0;
}
// Function definitions.
int printfun(int x)
{
    cout << "Welcome inside the function-" << x << endl;
}
int display()
{
    printfun(9); // Function call.
    cout << "Welcome inside the Display" << endl;
    return 5;
}

在此语句中

int printfun(display());// Function prototype

您定义一个用名称printFun的对象,该对象由函数呼叫display的返回值()初始化。正如您所想的那样,这不是函数声明。

因此,printFun是类型int然后表达式

的对象
printfun(9);//

没有任何意义,编译器会出错。

在第二种情况下,编译了代码,因为函数显示看到全局名称printFun被声明为函数名称。MAIN内部不可见printfun。实际上,您对MAIM和全局函数名称中定义的本地变量使用相同名称,该变量是在全局名称空间内声明的函数名称。功能显示看到此全局名称。