繁体   English   中英

C ++中的函数声明

[英]Function Declaration in C++

我在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定义int类型的对象,该对象由函数调用display()的返回值初始化。 它不是你想的功能声明。

因此printfun是int类型的对象然后是表达式

printfun(9);//

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM