Комментируемые строки в макросах - PullRequest
0 голосов
/ 15 июля 2009

Пожалуйста, помогите начинающему макросу ... Я создал простой макрос для загрузки изображений и разделил его на несколько строк, чтобы я мог регистрировать каждый раз, когда код, сгенерированный из макроса, выполняется (для отладки). Это выглядит так:

#define LOAD_PNG(L_I_IMAGE_NAME) ({ \
PngImageClass* __tmp; \
printf("Loading png: %s", L_I_IMAGE_NAME);\
__tmp = [image loading code here];\
__tmp; \
})

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

РЕДАКТИРОВАТЬ: Я был совершенно неправ, говоря, что это не работает "ни одним из нормальных способов", так как я был достаточно ленив, чтобы попробовать только однострочный комментарий. Я также прислушаюсь к советам нескольких респондентов, чтобы превратить это в функцию. Нет, нет веской причины (я думаю) использовать макрос для этого.

Ответы [ 4 ]

10 голосов
/ 15 июля 2009

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

#define LOAD_PNG(L_I_IMAGE_NAME) ({ \
PngImageClass* __tmp; \
/*printf("Loading png: %s", L_I_IMAGE_NAME);*/\
__tmp = [image loading code here];\
__tmp; \
})

Однострочные комментарии // просто не будут работать, потому что вы специально просите компилятор продолжить строки, предоставляя обратную косую черту (\) в конце каждой строки.

2 голосов
/ 15 июля 2009

Поскольку макрос состоит из одной строки (через продолжение строки), в нем нельзя использовать комментарии в стиле «#if 0» или «//». / ** / должно работать нормально.

Из фрагмента, который вы разместили, это не похоже на то, что макрос все равно должен быть. Макросы следует использовать только в том случае, если вы каким-либо образом пользуетесь текстовой подстановкой (например, для нее требуется как переменная, так и ее имя).

1 голос
/ 15 июля 2009

Почему у вас есть скобки вокруг макроса? Это не скомпилируется, если у вас возникли проблемы с препроцессором, и вам это точно не нужно.

0 голосов
/ 15 июля 2009

В дополнение к комментариям в стиле /.../ вы можете сделать следующее:

if (0) printf(...);

Лучше не использовать макрос, а вместо этого превращать его в функцию, если только нет действительно важных причин использовать макрос (но вы его не указали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...