printf ("LIST.H"), где LIST.H - макрос - PullRequest
0 голосов
/ 20 июня 2011
#include <stdio.h>
#include<stdlib.h>
#define LIST.H onus;

int main ()
{
         char *p,*s;
         printf(" LIST.H ");
}

Я ожидаю, что LIST.H напечатает onus как положено. Но этого не происходит. после компиляции я получаю предупреждение

temp.c:3:13: warning: missing whitespace after the macro name

и вывод LIST.H не бремя. Как я могу получить желаемую вещь, напечатанную вышеупомянутым макросом?

UPDATE
Я хочу иметь выход как onus с одним пробелом до и после строки.

Ответы [ 4 ]

5 голосов
/ 20 июня 2011

Имена макросов не могут содержать . внутри них. Вот почему вы получаете предупреждение: warning: missing whitespace after the macro name, после LIST он ожидает пробел, но вместо этого получает ..

Также, когда имя макроса находится внутри строки (между "string"), оно не заменяется определением макроса.

Вы можете сделать это вместо:

#define LISTH "onus"

// and then
  printf(LISTH);

, в который препроцессор преобразует:

  printf("onus");

Если вы делаете:

#define LISTH "onus";

препроцессор преобразует его в:

 printf("onus";);

, который не будет компилироваться.

2 голосов
/ 20 июня 2011

Во-первых, вы не можете использовать . в именах макросов.

Во-вторых, вы должны "ожидать", что он напечатает ouns;, поскольку вы включили ; в определение макроса.

В-третьих, для достижения этой цели вы можете использовать макро-оператор «stringization» # с некоторыми вспомогательными макросами

#define TO_STRING_(x) #x
#define TO_STRING(x) TO_STRING_(x)


#define LIST_H onus
...
printf(" " TO_STRING(LIST_H) " ");

или лучше

printf(" %s ", TO_STRING(LIST_H));
1 голос
/ 20 июня 2011

макросы в строках не разрешены, для этого нужно использовать слои макроразрешения:

#define __STR(x) #x
#define _STR(x) __STR(x)

printf(_STR(LIST));

у вас также не может быть точек в макросе, который определяет в последний раз, когда я проверял, что было бы причиной вашей ошибки, поэтому лучше использовать LIST_H ...

1 голос
/ 20 июня 2011
#include <stdio.h>

#define LIST_H "onus"

int main()
{
    printf(LIST_H);
}
...