2013-03-31 2 views
2

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

#if defined (MACRO_NAME) 
#warning "Macro name MACRO_NAME is already in use. Please rename the macro" 
#endif 

Было бы здорово, чтобы иметь макрос, который делает все, что проверка материала с целью повышения читабельности кода, но директивы не разрешены внутри макросов.

Я хотел бы что-то вроде этого:

#define CHECK_MACRO_NAME(MACRO_NAME) \ 
    #if defined (MACRO_NAME) \ 
    #warning "Macro name "MACRO_NAME" is already in use. Please rename the macro" \ 
    #endif 

Знаете ли вы какие-либо другие (лучше) способ сделать это?

+0

Я думаю, что ваш путь достаточно хорошо, и читаемым. – deepmax

+0

Спасибо :) Нет лучшего решения, я думаю ... –

ответ

5

Лучшим способом может быть просто позволить вашему компилятору выполнить проверку.

/* test.c */ 

#define MACRO 

#define MACRO 1 

Компиляция с использованием gcc:

$ gcc -c test.c 
test.c:3:0: warning: "MACRO" redefined [enabled by default] 
test.c:1:0: note: this is the location of the previous definition 
+0

Жаль, что я использую проприетарный компилятор, который генерирует код для старого микроконтроллера, который не показывает это предупреждение. К счастью, все еще поддерживается устаревшая директива #warning. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^