C++ 速查手冊

8.1 - 函數原型

自訂函數的定義需要放在 main() 或呼叫之前,如果放在 main() 或呼叫之後,例如

#include <iostream>
  
int main() {
    do_something("What's truth?");
    do_something("There is no spoon.");
    
    return 0;
}

void do_something(char* s) {
    std::cout << s << std::endl;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0801_1.cpp
   功能:示範 C++ 的函數
   作者:張凱慶*/

這樣無法通過編譯

$ g++ u0801_1.cpp
u0801_1.cpp:4:5: error: use of undeclared identifier 'do_something'
   do_something("What's truth?");
   ^
u0801_1.cpp:5:5: error: use of undeclared identifier 'do_something'
   do_something("There is no spoon.");
   ^
2 errors generated.
$

因為 C++ 預設任何識別字使用前都得先定義或宣告,如果我們要把自訂函數的定義放在 main() 或呼叫之後,就要先宣告函數原型 (function prototype) ,因此上例要改寫如下

#include <iostream>
  
void do_something(char*);

int main() {
    do_something("What's truth?");
    do_something("There is no spoon.");
    
    return 0;
}

void do_something(char* s) {
    std::cout << s << std::endl;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0801_2.cpp
   功能:示範 C++ 的函數
   作者:張凱慶*/

函數原型的宣告在第 3 行

void do_something(char*);

參數列方面宣告參數的型態即可,編譯執行結果如下

$ g++ u0801_2.cpp
$ ./a.out
What's truth?
There is no spoon.
$

通常函數原型的宣告會放在標頭檔 (header file) 之中,函數實作則會放在其他程式檔案。

上一頁 單元 8 - 函數
回 C++ 速查手冊首頁
下一頁 8.2 - 指標參數
回 C++ 教材
回程式語言教材首頁