выбираемая справочная таблица с использованием определения препроцессора

У меня есть программа c, которая использует таблицу поиска, определенную в отдельном файле .c.

Программа c фактически запускается на PIC24H и компилируется с использованием компилятора MPLAB XC16. Это не особенно актуально, за исключением того, что дает мотивацию к тому, что я пытаюсь сделать.

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

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

Если бы все таблицы были сохранены в программном коде, это заняло бы драгоценную программную память.

В основном я ищу совета по механике реализации выборочного поиска. Я думаю об этом ниже, но не уверен, как это на самом деле сработает.

#define CLEVEL 75 // CLEVEL may be in set {45 60 75}

#if (CLEVEL==45}
#include "clevel45.h"
#elseif (CLEVEL==60}
#include "clevel60.h"
#elseif (CLEVEL==75)
#include "clevel75.h"
#endif

person mzap    schedule 19.11.2018    source источник
comment
Другое решение - поместить все три таблицы в один файл .c и использовать директивы препроцессора для выбора таблицы.   -  person user3386109    schedule 19.11.2018
comment
Если они сводятся к одной и той же переменной, они определенно должны находиться не в отдельных файлах, а в одном файле .c.   -  person Lundin    schedule 20.11.2018


Ответы (2)


Я бы не стал смешивать файлы, которых не могло быть в будущем, создавая бесполезные зависимости. По-другому:

ваш_cfg_file.h:

#define CLEVEL75

ваш_clevel75_file.h:

#ifdef CLEVEL75
{your parameters}
#endif

ваш_clevel60_file.h:

#ifdef CLEVEL60
{your parameters}
#endif

...и так далее...

person Jose    schedule 19.11.2018
comment
Спасибо. Я пытаюсь сделать это так, как вы описываете, и получаю ошибку undefined reference error, хотя ясно, что прекомпилятор сработает по одному из ifdef. Неопределенная ссылка находится внутри этих ifdef. - person mzap; 19.11.2018
comment
Покажите нам свой новый код. Вы могли что-то упустить. - person A.R.C.; 20.11.2018

Или попробуйте что-то вроде этого:

level.c

#define CLEVEL 75 // CLEVEL may be in set {45 60 75}

#if (CLEVEL==45}
/*
parameter for level 45 ...
*/    

#elseif (CLEVEL==60}
/*
parameter for level 60 ...
*/    

#elseif (CLEVEL==75)
/*
parameter for level 75 ...
*/    

#endif

Таким образом, у вас не останется неиспользуемых файлов заголовков,

person Mike    schedule 20.11.2018