Я пытаюсь создать прозрачные функции отладки PRTINF в OpenCL ядер, которые:Preproccessed функция Printf
- Не загрязняет код (может быть вызвана из макс одна линия).
- Скомпилируйте, если указанное условие препроцессора окажется неверным.
Проблема заключается в том, что printf является переменной функцией, и я не могу обернуть ее в переменный макрос, поскольку язык ядра OpenCL (C99-деривация) не поддерживает переменные макросы.
#if DEBUG_CONDITION
printf("Any int %d\n",i);
#endif
Будет работать, но быстро сделает код нечитаемым.
if(DEBUG_CONDITION) printf("Any int %d\n",i);
Это также будет работать, но потребует меня, чтобы позволить PRINTF прагм, потому что функции должны фактически ссылаться в коде, даже если я знаю, что они будут собраны прочь. (Из OpenCL 2.0 на, Printf будет определены свойства синхронизации, и никто не может знать наверняка, будут ли введены синхронизации семантика в бинарных до фактического удаления функции или нет.)
PRINTF("Any int %d\n",i);
Я ищу что-то вроде этого (или похожего), которое выглядит красиво, но может полностью игнорировать ссылку prtintf alltogether.
Как насчет чего-то типа 'PRINTF ((« any int% d », i))'? –