@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы

Зачем static-переменную в языке Си делать глобальной?

На просторах интернета наткнулся на такой код:
static char daytab[2][13] = {
{0, 31, 28, 31. 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
}
/* day_of_year: определяет день года по месяцу и дню */
int day_of_year(int year, int month, int day)
{
int i, leap;
leap = year % 4 == 0 && year % 100 !=0 || year % 400 == 0;
for (i = 1; i < month; i++)
day += daytab[leap][i];
return day;
}
/* month_day: определяет месяц и день по дню года */
void month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
for (i = 1; yearday > daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
*pday = yearday;
)


Не понимаю, зачем здесь массив создается как static?
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
0xD34F
@0xD34F
Ну, если говорить конкретно про этот код, то, полагаю, для того, чтобы получить реакцию вот прям как у вас - недоуменное чесание затылка.

А вообще - глобальная переменная (или функция), объявленная как static, является не совсем глобальной. Для каждой единицы трансляции будет создан отдельный экземпляр. То есть, предположим, что у вас есть заголовочный файл, где объявляется static глобальная переменная, и вы этот файл подключаете в двух разных .c-файлах - каждый из них будет иметь собственный экземпляр переменной.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы