2015-05-14 3 views
0

Я хотел определить макрос, как -Как проверить переменный аргумент __VA_ARGS__?

#define log(lognumber,...) logreport(lognumber,__VA_ARGS__) 

Я хотел проверить случай исключения для пользователя __VA_ARGS__ этих аргументов может проходить, когда этот пользователь вызывает журнал() .please предоставить мне случай исключения для __VA_ARGS__.


[обновление от комментариев:]

Я имею в виду, я хотел написать LogReport таким образом, что он должен напечатать определенное число к ошибке, что я уже определил.

Принимая пример, как если бы я передаю

log(NOTE,"%s",str) 

, то в этом случае он печатает конкретные идентификаторы, которые я присвоенные в другом файле, как этот msgid %s, msdstr %s (10223), но пользователь использует

log(NOTE,"DIRECT STRING") 

это для этой строки требуется [???]. Так как же я могу проверить, что если пользователь проходит аргумент, таким образом

log(NOTE,"%s",str) 

или

log(NOTE,"direct string") 

таким образом в функции LogReport?

+2

Что вы подразумеваете под «случаем исключения»? Чего именно вы пытаетесь достичь/защитить? – cnicutar

+0

Просто напишите код в функции logreport, чтобы выполнить проверку с использованием стандартных макросов 'va_start',' va_arg' и 'va_end' для работы с переменными args. По крайней мере, это ответ на то, о чем я думаю, вы спрашиваете. Но ваш вопрос не очень ясен: «случай исключения для' __VA_ARGS__' »не является термином, который имеет смысл, не объясняя, что это значит. – kaylum

+0

Если я прочитаю это правильно (и я не уверен, что знаю), вас может заинтересовать http://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments – Wintermute

ответ

0

Так как я бы проверить, что если пользователь проходит аргумент,

Поскольку это стоит единственный способ, чтобы разобрать второй аргумент для occurency некоторого спецификатором преобразования как "%s".