2010-04-08 3 views

ответ

5

C строго статичен, вы не можете «искать», если переменная уже объявлена. Если вы создаете генератор кода, почему бы не прочитать строки кода и посмотреть, что было объявлено?

+0

Фактически я создаю несколько версий файла, а затем я генерирую целую кучу патчей. Эти исправления вставляют макросы, а некоторые макросы расширяются до деклараций, поэтому я не могу знать все во время генерации, потому что комбинация патчей может быть довольно сложной – LB40

0

Не совсем, нет. Нет, если вы не считаете, что пытаетесь его использовать и видите, компилируется ли ваш код.

Вы можете попытаться взломать что-то с препроцессором для определенных переменных, вроде как стандартный #ifdef в верхней части каждого включенного файла. Тем не менее, это не будет областью видимости, поскольку препроцессор работает до компилятора.

C не очень динамичный язык таким образом.

+0

Я согласен, но я не могу найти трюк CPP ... – LB40

1

Нет, нет. Это очень многое из того, что делают компиляторы.

Общим способом создания уникального имени переменной является использование очень маловероятного имени переменной, если возможно, в сочетании с номером строки. Что-то вроде

// beware, brain-compile code ahead! 
a_rather_unlikely_variable_name_by_sbi_ ## __LINE__ 
0

Является ли сама переменная генерируемой генератором или чем-то пользователем? Когда вы генерируете переменную youself, вы можете отправить токен препроцессора вместе с переменной и позже проверить, существует ли этот токен.

0

Я довольно поздно, хорошо есть простой способ узнать это, с текстовыми файлами; напишите имя переменной внутри файла сразу, когда вы его объявите, а затем проверьте позже, если имя написано. просто сделайте 3 макроса «DEF» «IF_DEF» и «IF_NOT_DEF», и это выглядит хорошо. Вы не можете найти на C, но вы можете посмотреть внутри файла. Но это занимает некоторую память.

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