глобальные константы без использования #define - PullRequest
12 голосов
/ 12 марта 2012

Хорошо, я хочу определить набор адресов памяти как константы в файле .h, который используется группой файлов .c (мы на C, а не на C ++).Я хочу иметь возможность видеть имя переменной вместо того, чтобы просто видеть шестнадцатеричный адрес в отладчике ... поэтому я хочу преобразовать имеющиеся у меня #defines в глобальные по объему константы.Проблема в том, что если я определю их так:

const short int SOME_ADDRESS  =  0x0010

, то получу страшную ошибку «множественные объявления», поскольку у меня несколько файлов .c, использующих один и тот же .h.Я хотел бы использовать enum, но это не сработает, поскольку по умолчанию используется тип integer (что в моей системе составляет 16 бит ... и мне нужно более точное управление типом).

Iдумал о том, чтобы поместить все адреса в структуру ... но у меня нет способа (который я знаю) установить значения по умолчанию для экземпляра структуры в заголовочном файле (я не хочу предполагать, что это конкретное.Файл c сначала использует структуру и заполняет ее в другом месте. Мне бы очень хотелось, чтобы константы были определены в файле .h)

Когда я начинал, это казалось таким простым, но я не вижу хорошегоспособ определения глобально доступной константы short int в заголовочном файле ... кто-нибудь знает способ сделать это?

спасибо!

Ответы [ 2 ]

28 голосов
/ 12 марта 2012

Объявите константы в заголовочном файле, используя extern:

extern const short int SOME_ADDRESS;

затем в любом, но только одном файле .c укажите определение:

const short int SOME_ADDRESS = 0x0010;
0 голосов
/ 12 марта 2012

Если вы компилируете с помощью gcc, вы можете добавить переключатель -ggdb3, который скажет gcc хранить информацию о макросах (т.е. #define s), чтобы они могли использоваться внутри gdb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...