C++ 編譯器採單向掃描,呼叫端必須先「看過」被呼叫函式的宣告或定義。本文透過範例說明函式前置宣告、標頭檔分離、#include 兩種引用語法差異,以及命名空間解決同名函式衝突的做法。
若 maxvalue() 定義在 main() 之後,直接呼叫會導致編譯錯誤。解決方式有二:
main() 之前。int maxvalue(int, int, int);#include 差異將函式定義置於 common.h,再於主程式 #include "common.h"。引用語法規則:
#include <iostream>:標準函式庫,編譯器從系統路徑搜尋。#include "common.h":自訂標頭檔,編譯器從專案/工作目錄搜尋。#include 實質相當於將檔案內容插入引用處。
若主程式與標頭檔皆定義 maxvalue(),直接編譯會報錯「多重定義」。解決方法:為標頭檔函式包裹命名空間:
// common.h
namespace Common {
int maxvalue(int a, int b, int c) { ... }
}
呼叫時以作用域解析運算子指明:
cout << Common::maxvalue(a, b, c); // 呼叫 common.h 版本
cout << maxvalue(a, b, c); // 呼叫本地版本
此機制類似 C# 的 namespace,但 C++ 使用 :: 而非 .。