在 C++ 中,#define 指令常用於定義符號常量,這些常量會在編譯時期直接替換至二進制碼中,效果與 const 定義的常值變數相似。例如:


除此之外,#define 還可控制編譯器行為,透過條件編譯決定是否編譯特定程式碼。常見於 C++ 標頭檔的防重複包含機制:
#if !defined(AFX_MAINFRM_H__0EFEA8A4_112C_4528_B7A8_761F1B02C20C__INCLUDED_) // 若未定義
#define AFX_MAINFRM_H__0EFEA8A4_112C_4528_B7A8_761F1B02C20C__INCLUDED_ // 則定義
#if _MSC_VER > 1000 // 若編譯器版本大於 1000
#pragma once
#endif // _MSC_VER > 1000
在 .NET 環境中,這些行為有何不同?
在 C# 中,#define DEBUG 僅用於定義符號,不可賦值。例如 #define DEBUG=TRUE 是無效的。後續程式碼使用 #if 判斷符號是否已定義。
VB.NET 不使用 #define,改用 #Const 定義編譯時期常數,並搭配 #If 進行條件編譯:
#Const MINI = 1
#Const VERSION = 1.0
Const MINI As String = "4"
#Region "這是一個代碼塊"
Sub Main()
#If MINI = 1 Then
Console.WriteLine("Hello.world")
#End If
End Sub
#End Region
總結:C++ 的 #define 兼具巨集替換與條件編譯;C# 僅保留條件編譯符號定義;VB.NET 則透過 #Const 達成類似目的。