【发布时间】:2012-06-06 18:57:46
【问题描述】:
我有几个相机对象的标签,我正在尝试节省内存(非常吝啬的内存环境)。这是我当前的版本,使用静态常量数组和宏:
在标题中:
#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## 值?我尝试了## 粘合宏的一些组合,但它会放入“cam”或任何传递给宏的变量名,而不是那个变量值。我可能错过了一些非常明显的东西。
提前致谢。
【问题讨论】:
-
cam的值只在运行时可用,宏扩展是在编译时之前,所以不能这样工作。 -
我知道有一个明显的原因。非常感谢您的澄清。