簡體   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