struct Non_const, non_volatile статическая или внешняя переменная
Мой код компилируется и запускается, но я все еще получаю сообщение об ошибке lint:
--- Модуль: LunchMenu_main.c (C)
} обед [ОБЕДЫ] =
LunchMenu_main.c: предупреждение 956: (Примечание - неконстантная, энергонезависимая статическая или внешняя переменная 'lunch')
Хотя использование непостоянных статических и внешних переменных продемонстрировано, использование их имеет много подводных камней, и их следует избегать, если нет другого разумного решения. Можно ли как-то избежать таких переменных или мне нужны эти переменные, чтобы исправить эту ошибку? Вот мой код:
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 ответ
Предупреждение, вероятно, дается, так как ваша переменная lunch
определяется с использованием типа, определенного в том же C-файле, поэтому вы не можете определять другие переменные в других единицах компиляции, используя тот же тип, поэтому придание вашей переменной глобальной видимости не имеет смысла. Так должно быть static
,
... использование их имеет много подводных камней, и их следует избегать, если нет другого разумного решения.
Позволю себе не согласиться. Да, у них есть некоторые подводные камни, но я не вижу причин избегать их любой ценой. При ответственном подходе они могут помочь лучше структурировать ваш код.