C++ 宏的特殊符号: ‘#’, ‘##’, ‘\’

  • 字符串操作符: #. 在宏中的参数前使用可以在预处理时将参数转换为字符串. 忽略参数前后的空格, 参数中间的多个空格转换为一个空格.
  #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)

如果觉得有帮助,可以扫描右边的微信打赏码支持一下.

Leave a Reply

Your email address will not be published. Required fields are marked *