在 C 語言中,#
和##
是前處理器運算子,具有特定的功能。
一、#
運算子(字串化運算子)
-
概念:
#
運算子被稱為字串化運算子。它的作用是將其後面的引數轉換為字串常量。
-
作用:
- 在宏定義中,
#
可以將傳入的引數轉換為字串,方便輸出除錯資訊或者構建特定的字串。
- 在宏定義中,
-
程式碼例子:
#include <stdio.h> #define PRINT_MSG(msg) printf(#msg "\n") int main() { PRINT_MSG(Hello, world!); return 0; }
在這個例子中,
PRINT_MSG(Hello, world!)
會被前處理器擴充套件為printf("Hello, world!" "\n")
,最終輸出"Hello, world!"。
二、##
運算子(連線運算子)
-
概念:
##
運算子被稱為連線運算子。它用於在宏定義中連線兩個標記(token)。
-
作用:
- 可以將兩個識別符號、常量或者其他前處理器標記合併成一個新的標記。
-
程式碼例子:
#include <stdio.h> #define CONCAT(a, b) a##b int main() { int num = CONCAT(12, 34); printf("%d\n", num); return 0; }
在這個例子中,
CONCAT(12, 34)
會被前處理器擴充套件為1234
,然後賦值給num
,最終輸出1234
。
總之,#
和##
運算子在 C 語言的前處理器中提供了強大的功能,可以在宏定義中實現字串化和標記連線等操作,幫助程式設計師更靈活地編寫程式碼。但在使用時需要注意其特定的語法和行為,以避免出現意外的結果。