C++ 速查手冊 V1.00 - 單元 8.1 - 函數原型

C++ 速查手冊 V1.00 - 單元 8.1 - 函數原型



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


001 #include <iostream>
002
003 int main() {
004    do_something("What's truth?");
005    do_something("There is no spoon.");
006
007    return 0;
008 }
009
010 void do_something(char* s) {
011    std::cout << s
012              << std::endl;
013 }
014  
015 /* Kaiching Chang 
016    u0801_1.cpp
017    2014-02 */

這樣無法通過編譯


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

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


001 #include <iostream>
002
003 void do_something(char*);
004
005 int main() {
006    do_something("What's truth?");
007    do_something("There is no spoon.");
008
009    return 0;
010 }
011
012 void do_something(char* s) {
013    std::cout << s
014              << std::endl;
015 }
016  
017 /* Kaiching Chang 
018    u0801_2.cpp
019    2014-02 */

函數原型的宣告在第 3 行


003 void do_something(char*);

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


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

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

continue ...

沒有留言: