我正在尝试在IAR中编译以下代码,我得到以下错误 "表达式必须具有const值" 。但是相同的代码在GCC中编译。任何人都可以请指出我在这段代码中出了什么问题。注意:这是遗留代码。
以下是我的代码
/*Structure*/
typedef struct KEY_VALUE
{
uint32_t key;
void * value_1;
void * value_2;
uint16_t publish;
uint16_t attributes;
}KEY_VALUE_STRUCT;
/*Macro Assignment*/
#define CTESTCODE_1 ((void*)GetCount)
#define CTESTCODE_2 ((void*)0)
/*Function*/
uint32 GetCount(void)
{
/*Get relay counts returns constant value*/
return ((uint32)GetRelayCount());
}
/*Value*/
KEY_VALUE_STRUCT RelayCount[] = {
{100, CTESTCODE_2 , CTESTCODE_1 , TRUE, 0 }}
我想在数组中使用该函数的返回值。请帮我解决这个问题。 谢谢!
答案 0 :(得分:0)
我不认为你想做的事情是可能的。在预处理器甚至编译代码之前评估宏。 可以取代变量,如果它们代表常量表达式,但它们不能保存变量。
可能有一种方法(我必须考虑这一点)黑客基于宏的功能,做你想做的事情。但是,您最终会遇到非常危险且难以维护的代码。