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;
}
/* 《程式語言教學誌》的範例程式
http://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;
}
/* 《程式語言教學誌》的範例程式
http://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) 之中,函數實作則會放在其他程式檔案。
相關教學影片