Объявление констант в .h файле. - C (СИ)
Формулировка задачи:
Есть такой ламерский вопросик.
Есть напрмер hfile.h, который инклудится в несколько .c сишных файлов.
В .h хочется обявить константу (дабы не плодить объявления в двух си-файлах)
Например костантный массив:
Компилятор(у меня gcc) ругается "multiple definition of `nums'", и я понимаю почему. А как сделать правильно?
#ifndef _HFILE_H
#define _HFILE_H
const char * const nums[] = {"one", "two", "three"}; // я вообще правильно обявляю то?
#endifРешение задачи: «Объявление констант в .h файле.»
textual
Листинг программы
static const char * const nums[] = {"one", "two", "three"};
Объяснение кода листинга программы
В данном коде объявляется массив (или точнее, массив указателей) строк с тремя элементами, инициализированными строками one, two, three. Это делается для того, чтобы эти строки можно было использовать в программе как константы. В C массивы строк (char arrays) нумеруются с 0, то есть первый элемент массива будет иметь индекс 0, второй - 1, и т.д.
Список элементов кода:
- Объявление массива строк:
static const char * const nums[] = {one,two,three}; - Значения переменных:
one,two,three. - Тип данных переменных:
const char *. - Массив содержит 3 элемента.
- Элементы массива являются указателями на строки.
- Строки являются константами, их нельзя изменять.
- Массив является статическим, его область видимости не ограничена функцией.
- Массив является массивом const, то есть его элементы нельзя изменять.
- Элементы массива могут содержать строковые литералы.
- Массив может быть использован в программе как набор константных строк.
- Значения массива могут быть использованы в качестве аргументов функций.
- Массив может быть использован для чтения строк по индексам.
- Массив может быть использован для сравнения строк.
- Массив может быть использован для поиска подстрок в строках.
- Массив может быть использован для работы со строками в цикле.
- Массив может быть использован для работы со строками в условии.
- Массив может быть использован для копирования строк.
- Массив может быть использован для работы со строками в структуре данных.
- Массив может быть использован для работы со строками в другой функции.
- Массив может быть использован для работы со строками в другом модуле.