Я писал небольшую функцию исходного файла для моего Pic32 и застрял на одном. По сути, это утилита, которая должна сохранять входящие char
данные в буфер, а затем, если получены '\r'
, она сравнивает буфер со списком команд (в массиве names
), и если совпадение найдено, возвращается индекс элемента.
Эта часть из заголовка:
#define NAMECNT 6
static const char names[NAMESCNT][10] = { // 6commands, max 10 char each
"korr", // 1
"adc", // 2
"fft", // 3
"data", // 4
"pr", // 5
"prsc"}; // 6
/* functions */
extern int comm(char cdata);
В основном файле есть один большой переключатель:
switch( comm(recieved_ch) ){
case 1: foo1(); break;
case 2: foo2(); break;
...
}
Теперь, для большей ясности, я хотел использовать вместо 1, 2, ... исходные имена (например, case KORR: case ADC:
), поэтому я написал определения для каждого из них.
#define KORR 1
#define ADC 2
Но мне не нравится это решение, потому что я хочу использовать этот исходный файл в большем количестве проектов, и для каждого из них будет свой список команд. Есть ли способ, как это сделать? Лучше всего было бы создать имена массивов в препроцессоре, но я сомневаюсь, что это вообще возможно. Я думал об использовании типа enum (который будет иметь те же элементы, что и список команд names
), но я не уверен, как это будет происходить.
static const
, определенный в заголовке? Пожалуйста, переместите это в исходный файл и заменитеextern
декларацией, пока кто-нибудь не потерял глаз. Сомневаюсь, что всем вашим клиентам нужны собственные копии констант. - person sendaran   schedule 05.09.2016