2014-12-22 1 views
0

Я пытаюсь использовать макрос __COUNTER__, чтобы генерировать уникальные имена переменных в моем коде. Но макрос не работает. Возможно, я использую его неправильно. Пожалуйста, предоставьте мне указания или предложения о том, что я делаю неправильно.__COUNTER__ проблемы с макросом. Не отображать значение

#define DUMB_MACRO() ht##__COUNTER__

должен дать мне HT0, HT1 ....

Как я зову его в главном файле

DUMB_MACRO();

Но компилятор говорит, что Безразлично» t разрешите символ ht__COUNTER__, если я попытаюсь использовать переменную ht0.

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

Например:
__CONCAT(ht,1) работает и дает мне ht1 но __CONCAT(ht,i) где i переменная холдинга говоря значение 1 не работает, потому что его значение не известно во время компиляции.

+1

Имейте в виду, что '__COUNTER__' является расширением GNU; это не обязательно переносимо для компиляторов, отличных от g ++ (возможно, также поддерживает clang ++). (Если это не было добавлено к стандарту совсем недавно). –

+0

Не было. http://stackoverflow.com/questions/652815/has-anyone-ever-had-a-use-for-the-counter-pre-processor-macro – 2501

ответ

2

Вы должны расширить макрос:

#define MACRO3(s) ht##s 
#define MACRO2(s) MACRO3(s) 
#define MACRO MACRO2(__COUNTER__) 

int MACRO ; //ht0 
int MACRO ; //ht1 
+0

Это сработало. Отлично. Благодарю. – user4362837

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