C語言中的#和##

西北野狼發表於2024-09-01

在 C 語言中,###是前處理器運算子,具有特定的功能。

一、#運算子(字串化運算子)

  1. 概念:

    • #運算子被稱為字串化運算子。它的作用是將其後面的引數轉換為字串常量。
  2. 作用:

    • 在宏定義中,#可以將傳入的引數轉換為字串,方便輸出除錯資訊或者構建特定的字串。
  3. 程式碼例子:

    #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!"。

二、##運算子(連線運算子)

  1. 概念:

    • ##運算子被稱為連線運算子。它用於在宏定義中連線兩個標記(token)。
  2. 作用:

    • 可以將兩個識別符號、常量或者其他前處理器標記合併成一個新的標記。
  3. 程式碼例子:

    #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 語言的前處理器中提供了強大的功能,可以在宏定義中實現字串化和標記連線等操作,幫助程式設計師更靈活地編寫程式碼。但在使用時需要注意其特定的語法和行為,以避免出現意外的結果。

相關文章