struct Non_const,non_volatile static或external variable

时间:2012-08-08 14:02:30

标签: static struct external non-volatile

我的代码编译并运行但我仍然收到一条lint错误消息:

  

---模块:LunchMenu_main.c(C)
  午餐[午餐] =
  LunchMenu_main.c:警告956 :(注意 - 非常量,非易失性静态或外部变量'午餐')

虽然证明了使用非恒定的静态和外部变量,但使用它们有许多缺陷,除非没有其他合理的解决方案,否则应该避免使用它们。有什么办法可以避免这些变量,还是我需要这些变量来修复这个错误?这是我的代码:

struct Food
{
    char *name;
    int weight, calories;
} lunch[LUNCHES] = 
    {{(char *)"apple", 4, 100}, {(char *)"salad", 2, 80}};

int main(void)
{
    int counter;    
    struct Food *foodPtr = &lunch[0];

    printf("%-10s %-10s %-10s\n", "name", "weight", "calories");       

    for (counter = 0; counter < 2; counter++)
    {      
       foodPtr = &lunch[counter];            
       printf("%-10s %-10d %-10d\n",
           foodPtr->name, foodPtr->weight, foodPtr->calories);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

由于您的变量lunch是使用同一C文件中定义的类型定义的,因此可能会发出警告,因此您无法使用相同类型在其他编译单元中定义其他变量,因此提供变量全局可见性没有意义。它应该是static

  

...使用它们有很多陷阱,除非没有其他合理的解决方案,否则应该避免使用它们。

我不同意见。是的,他们有一些陷阱,但我认为没有任何理由不惜一切代价避免它们。以负责任的方式使用,它们可以帮助您更好地构建代码。