печать имени переменной в #define

Я пытаюсь распечатать на консоли с помощью макроса имя переменной для отображения значения членов во время отладки ( ведения журнала ). Как это сделать? Я попробовал следующее, Но это не работает.

#define MY_PRINT(x) std::cout << "'x'=" << x << std::endl;

int main(){
   int my_variable=3;
   MY_PRINT( my_variable );
   // I would like to print to console
   // 'my_variable'=3
}

2 ответов


Ауч... Я нашел решение.

Я должен написать макрос такой

 #define MY_PRINT(x) std::cout << #x"=" << x << std::endl

для C++ я использую этот:

#define STR(x) #x << '=' << x

int main()
{
  int i = 1;
  std::string str("hello");
  std::vector<std::string> vec;
  my_class mc;

  ...

  std::cout << STR(i) << std::endl
            << STR(str) << std::endl
            << STR(vec) << std::endl
            << STR(mc) << std::endl;

  return 0;
}

таким образом, компилятор выбирает оператор потоковой передачи на основе типа данных, поэтому вам не нужно беспокоиться о разных макросах для каждого, и он может перейти к любому std::ostream, а не только std::cout. Просто укажите соответствующий оператор потоковой передачи для ваших данных:

std::ostream operator<<(std::ostream&, const T&);
std::ostream operator<<(std::ostream&, const std::vector<T>&);
etc

но я хотел бы, чтобы был способ шаблона для замены макроса или, по крайней мере, имя переменной, предоставленное #x.