[英]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.