0

私のコードはコンパイルされて実行されますが、まだ lint エラー メッセージが表示されます。

--- Module: LunchMenu_main.c (C)
} lunch[LUNCHES] =
LunchMenu_main.c: warning 956: (注 -- 非 const、非揮発性 static または外部変数 'lunch')

非定数の static および外部変数の使用が示されていますが、それらの使用には多くの落とし穴があり、他に合理的な解決策がない場合を除き、使用を避ける必要があります。これらの種類の変数を回避する方法はありますか、またはこのエラーを修正するためにこれらの変数が必要ですか? これが私のコードです:

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;
}
4

1 に答える 1

0

同じ C ファイルで定義された型を使用して変数が定義されているため、警告が表示lunchされる可能性があります。そのため、同じ型を使用して他のコンパイル単位で他の変数を定義することはできず、変数にグローバルな可視性を与えることは意味がありません。である必要がありますstatic

... それらの使用には多くの落とし穴があり、他に合理的な解決策がない場合を除き、避けるべきです。

失礼ですが同意できません。はい、いくつかの落とし穴がありますが、絶対に避ける理由はありません。責任ある方法で使用すると、コードをより適切に構造化するのに役立ちます。

于 2012-11-26T09:19:34.933 に答える