如何在typedef结构中使用const int?

时间:2018-06-20 18:29:03

标签: c mplab

我正在使用'const int'和'char const * const',以通知编译器我的值永远不会改变。我需要成功完成最少的程序和数据存储。

   typedef struct{
         char const * const   Name[2];
         const int  MaxValue;
         const int  MinValue;
         const int  Type;
         const int  EppromLocation;
         const int  NextID;
         const int  PreviousID;

      union{ 
      unsigned int DefaultValue;
      unsigned char bytes[2];
      }SetValues;

   } Parameters;

  extern volatile  Parameters MenuRegister[50];

我遇到错误:

a.c:119: error: (364) attempt to modify object qualified const
a.c:123: warning: (358) illegal conversion of pointer to integer 

该错误显示在我的源文件中

 MenuRegister[0].Name[0]="A";
 MenuRegister[0].Type=1;
 MenuRegister[0].SetValues.DefaultValue=1;
 MenuRegister[0].EppromLocation=1;
 MenuRegister[0].Visible=true;
 MenuRegister[0].NextID=1;
 MenuRegister[0].PreviousID=1;
 MenuRegister[0].MaxValue=1;

1 个答案:

答案 0 :(得分:3)

问题是您无法在实例化后设置这些const限定值。创建后,您将需要初始化const限定的struct成员。

也许是这样(我简化为2的数组,因为在一个示例中我不会为它们的50个做这些):

MenuRegisters[2] = {
   {.Name = {"A","B"},
    .Type=1,
    .SetValues.DefaultValue=1,
    .EppromLocation=1,
    .Visible=true,
    .NextID=1,
    .PreviousID=1},
   {.Name = {"C","D"},
    .Type=2,
    .SetValues.DefaultValue=2,
    .EppromLocation=2,
    .Visible=true,
    .NextID=2,
    .PreviousID=2}}

还要注意,Visible不在您给我们提供的Parameters的定义中。