C++笔记 - 宏的特殊符号:#, ##, \

1,352 阅读1分钟
  • 字符串操作符: #。在宏中的参数前使用可以在预处理时将参数转换为字符串。忽略参数前后的空格,参数中间的多个空格转换为一个空格。

    #include <iostream>
    
    #define print_variable_name(variable) std::cout <<"variable name: " <<  #variable << std::endl
     #define get_string(str) #str
    
    int main(void) {
        int num = 1;
        print_variable_name(num); // 输出: variable name: num
    
        std::cout << get_string( 123 ) << std::endl; // 输出: 123
        std::cout << get_string( 1     2       3 ) << std::endl; // 输出: 1 2 3
    }
    
  • 符号连接操作符:##。如果##后面连接另一个宏名称,会阻止这个宏展开。

    #include <iostream>
    
    #define print_variable(index) std::cout << num_##index << std::endl
    
    int main(void) {
        int num_1 = 1, num_2 = 2, num_3 = 3;
        print_variable(1); // 输出: 1
        print_variable(2); // 输出: 2
        print_variable(3); // 输出: 3
    }
    
  • 续行操作符:\\后面不可以有空格。

    #define inc_and_print_variable(variable) do { \
    	variable++; \
    	std::cout << variable << std::endl; \
    } while(0)