Построение строк с макросами препроцессора C - PullRequest
0 голосов
/ 11 апреля 2019

Следующий код взят из книги C Puzzle (глава Основные типы 1.1. ).Я не могу заставить его работать.

#include <stdio.h>

#define PRINT(format,x) printf("x = %format\n",x)

int integer = 5;
char character = '5';
char *string = "5";

main(){
    PRINT(d,string); PRINT(d,character); PRINT(d,integer);
    PRINT(s,string); PRINT(c,character); PRINT(c,integer=53);
    PRINT(d, ( '5' > 5 ));

    {
        int sx = -9;
        unsigned ux = -8;
        PRINT(o,sx); PRINT(o,ux);
        PRINT(o, sx>>3); PRINT(o, ux>>3 );
        PRINT(d, sx>>3); PRINT(d, ux>>3 );
    }
}

Проблема в макросе в третьей строке: #define PRINT(format,x) printf("x = %format\n",x).

  • Не поддерживают ли существующие (соответствующие стандартам) C-препроцессоры замену внутри строковых литералов?
  • Можете ли вы переопределить макрос, чтобы остальная часть кода работала без каких-либо дальнейших изменений?

1 Ответ

4 голосов
/ 11 апреля 2019

Вопрос в том, действительно ли любой C препроцессор когда-либо заменял внутри строковых литералов. Я никогда не сталкивался с одним.

Требуется строка с использованием #:

#define PRINT(format,x) printf(#x " = %" #format "\n", (x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...