【发布时间】:2014-03-04 06:42:00
【问题描述】:
如何在结构中保存一个常量值?如果我将 const 放在 LEBEL0 上,我将无法在 LEBEL1 上分配给它。但是,如果我不在 LEBEL0 处放置 const,那么我将在 LEBEL1 处收到限定符丢失警告。有没有办法做到这一点?我想出了一个肮脏的解决方案(如下),但我认为可能会有更好的解决方案......
typedef struct _MyStruct
{
const SomePointerType pktData; <--LABEL0
}MyStruct;
const SomePointerType SomeFunctionICannotModify()
{
…
}
void SomeFunction()
{
MyStruct data;
….
data.pktData = SomeFunctionICannotModify(); <--LABEL1
....
SomeSubFunction(&data);
}
void SomeSubFunction(MyStruct* data)
{
this function does not modify any fields in "data".
}
PS:上面的代码是“模型”,不是真实的代码,用来说明我的问题。它没有我实际程序中的所有代码。请不要问“你为什么要那样做”、“你不必那样做”、“那段代码无法编译”之类的问题。
我的肮脏解决方案
typedef struct _ConstHolder
{
const SomePointerType pktData;
}ConstHolder;
typedef struct _MyStruct
{
ConstHolder holder;
}MyStruct;
void SomeFunction()
{
MyStruct data;
….
ConstHolder holder = {SomeFunctionICannotModify()};
data.holder = holder;
....
SomeSubFunction(&data);
}
【问题讨论】:
-
为什么一定要const?
-
与其制作一些假代码来“说明您的问题”,不如制作一个实际的简短可编译示例?它会同样简单,而且不会那么难以理解。
标签: c struct constants variable-assignment compound-assignment