Макро, который печатает выражение и оценивает его (с __string)

StackOverflow https://stackoverflow.com/questions/377425

  •  22-08-2019
  •  | 
  •  

Вопрос

Для обучения и демонстрации мне нужен макрос, который печатает свой параметр а также оценивает это. Я подозреваю, что это очень распространенный случай, может быть даже FAQ, но я не могу найти реальные ссылки.

Мой текущий код:

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", __STRING(expr), (expr)))

а потом:

PRINT(x & 0x01);

Это работает нормально, но я не уверен в юридическом статусе __string макрос, особенно с тех пор, как он находится в частном пространстве __ имен.

Итак, мои вопросы:

  1. Есть ли лучший способ написать этот макрос?
  2. __String Standard/Great/Evil?
  3. Как использовать существующие инструменты поиска, чтобы найти __string? Итак, поисковая система просто ищет все, что содержит строку :-(
Это было полезно?

Решение

Вы можете использовать токен препроцессора #, который преобразует свой аргумент RHS в строковую литературу:

#include <stdlib.h>
#include <stdio.h>

#define STR(x) #x
#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", STR(expr), (expr)))

int main(void)
{
    int x = 7;

    PRINT(x & 0x01);

    return EXIT_SUCCESS;
}

2) Это определенно не стандартное, и это первый раз, когда я столкнулся с этим; Не удивительно, поскольку, похоже, не делает гораздо больше, чем макрос STR () выше, на первый взгляд.

3) Google Кажется, работает нормально.

Другие советы

Что-то типа

#define PRINT(expr) (fprintf(stdout, "%s -> %d\n", #expr, (expr)))

Вероятно, вы хотите. # оператор строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top