2015-06-10 4 views
1

У меня есть заголовочный файл, который содержит все командную строку, как показано ниже:Декларирование глобального массива символов в заголовочном файле C

const char AT_RSSI[] = "ATRSSI\r\n"; 
const char AT_DEVICE_SECURITY[] = "ATDS"; 

Но, используя этот метод, каждый из полукокса предложения прилагается с \ 0 в конце и это неудобно, как мне нужно, чтобы удалить 1 символ, каждый раз, когда я использую() метод SizeOf

Существует еще одно решение заключается в использовании

//header file 
extern const char *AT_RSSI; 

//some.c 
const char *AT_RSSI = "ATRSSI\r\n"; 

и объявить его в одном из файла .c, но я не как этот подход. Я хочу, чтобы вся моя константная переменная была объявлена ​​в заголовочном файле

Могу ли я узнать, как объявить постоянный массив переменных глобальной переменной, который может быть включен в файл .c?

+0

Что вы делаете, что вы хотите вещи, которые выглядят как строки, но не являются пустой -терминирован, и вы также хотите получить длину указанных не-строк с 'sizeof', а не' strlen'?!?! – Hurkyl

+0

@Hurkyl да, я мог бы использовать этот strlen – Tim

+1

По крайней мере, вам нужно прочитать [Как использовать 'extern' для обмена переменными между исходными файлами в C?] (Http://stackoverflow.com/questions/1433204) В частности, вы не можете надежно инициализировать переменные в заголовке - не просто. Если вы это сделаете, заголовок может использоваться только одним исходным файлом в вашей программе. Использование 'char *' вместо массивов просто уничтожает пространство, сохраняя указатели. И он не теряет завершающий нулевой байт. –

ответ

3

Задача первой части кода, вы ставите ОПРЕДЕЛЕНИЯ в заголовочном файле, который приведет к ошибке множественного определения, если файл заголовка включен кратному .c файлы.

В общем, поставил определения только в .c файл и поместить их Объявления и декларации в заголовке.

Это означает, что поставить это в .c файле:

const char AT_DEVICE_SECURITY[] = "ATDS"; 

и это в заголовке:

extern const char AT_DEVICE_SECURITY[]; 
+0

спасибо! так что это плохая идея, чтобы определить мою глобальную переменную в заголовке и включить в несколько файлов C? – Tim

+0

@Tim Попробуйте, вы увидите ошибку при связывании. –

+0

Я попробовал это, прежде чем я не получаю никакого связывания ошибок, но если бы я использовал const char * AT_DEVICE_SECURITY = "ATDS"; я получаю сообщение об ошибке, – Tim

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