2010-08-18 3 views
1

Возможно ли найти, где определяется typedef?Можете ли вы найти, где определяется typedef?

Я бегу в это очень уклончиво проблема, которая производит следующее сообщение об ошибке компилятора:

/usr/include/stdint.h: At global scope: 
/usr/include/stdint.h:57: error: duplicate 'unsigned' 
/usr/include/stdint.h:57: error: declaration does not declare anything 

где /usr/include/stdint.h:57 является:

typedef unsigned int uint32_t 

Мои первоначальные мысли, что что-то другое определение uint32_t, и когда stdint пытается переопределить его, возникает ошибка. Но я не знаю, как я могу вернуться туда, где был вызван этот typedef, или даже то, что текущее значение uint32_t есть, когда это вызвано.

Любые идеи?

+0

http://www.opengroup.org/onlinepubs/9699919799/utilities/ctags.html – msw

ответ

1

Вы можете получить предварительно обработанный вывод (-E на большинстве компиляторов), который даст вам полные объявления всех заголовков. В этом случае вы можете grep для uint32_t. Это должно показать, какой заголовок был тем, который вызвал дублирование typedef.

+0

Спасибо, похоже, что это дало мне то, что мне понадобилось бы (если бы я не просто открыл причину за несколько минут до чтения это). Я дошел до построения дерева #include непосредственно перед ошибкой, чтобы увидеть, было ли что-то еще заранее наложено на него. К сожалению, я был настолько поглощен typedef, я пренебрег поиском #defines. В недавнем слиянии ветвей кто-то имел #defined uint32_t для unsigned long, поэтому в stdint.h (вызывается после #def) строка: 'typedef unsigned int uint32_t' на самом деле была 'typedef unsigned int unsigned long', выровняйте дубликат ' беззнаковый "и мои проблемы. – Paul

+0

Это было то, что я забыл добавить в свой ответ - следите за #defines, и вот где -E помогает. – Gangadhar

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