У меня есть несколько ярлыков для объектов камеры, и я пытаюсь сэкономить память (очень скупое окружение памяти). Вот моя текущая версия, с использованием статического константного массива и макрос:Макро для замены многих строковых констант
В заголовке:
#define NUM_CAMERAS 6
static const char* CAM_LABELS[NUM_CAMERAS] = { "Camera1",
"Camera2",
"Camera3",
"752x480_cam",
"std_cam",
"wide_cam" };
#define CAM_LABEL(id) id<=NUM_CAMERAS?CAM_LABELS[id-1]:"cam id error"
Использование в программе:
int cam = 3;
pritnf("Configuring camera id [%d], label: [%s]\n",cam, CAM_LABEL(cam));
Вышеуказанные работы, но я хотел используйте макросы для замены статического массива const, поэтому мне бы хотелось, чтобы что-то в заголовке было больше похоже:
#define NUM_CAMERAS 6
#define CAM_LABEL1 "Camera1"
#define CAM_LABEL2 "Camera2"
#define CAM_LABEL3 "Camera3"
#define CAM_LABEL4 "752x480_cam"
#define CAM_LABEL5 "std_cam"
#define CAM_LABEL6 "wide_cam"
#define CAM_LABEL(id) /* myster code */
Есть ли способ передать целочисленное значение как «id» выше, а затем воссоздать известное значение CAM_LABEL ##? Я попробовал несколько комбинаций макроса ## gluing, но он помещал бы в «cam» или любое другое имя переменной в макрос, вместо этого значения переменных. Я, наверное, пропустил что-то очень очевидное.
Заранее спасибо.
Значение 'cam' доступно только во время выполнения, расширение макроса до компиляции, поэтому он не может работать таким образом. –
Я знал, что есть очевидная причина. Большое спасибо за разъяснение. – user1440556