LINUX.ORG.RU
Ответ на: комментарий от Deleted

Да, забыл упомянуть, что нужно и наклейку «static» отодрать.

И почти наверняка процесс у ТСа бесконечный в его ардуине ;)

qbe
()
Ответ на: комментарий от anonymous

Складной нужно было брать. Или стул обычный, но вместо кровати или дивана - раскладушку. Тогда места хватит

anonymous
()
Ответ на: комментарий от DELIRIUM

Смелое предположение...

Плюсую.

Deleted
()
Ответ на: комментарий от qbe

Это дальше уже.
Так то у меня пример был показывающий как это всё в памяти отображается, но рано пока

mittorn ★★★★★
()
Ответ на: комментарий от DELIRIUM

Или разберётся и после этого не будет тупить или не осилит и пойдёт писать пыхтонах

mittorn ★★★★★
()

Коротко:
1. Глобальная переменная заставляет компиляоор зарезервировать место под неё.
2. extern декларация заставляет компилятор найти переменную определённую в другом файле
3. static у глобальной заставляет компилятор скрыть переменную от другихи файлов
4. static у переменной внутри функции делает переменную постоянной как и глобальные, но видно её только внутри функции

mittorn ★★★★★
()
Ответ на: комментарий от mittorn

Коротко: 1,2,3,4.

А где здесь выигрыш по памяти то?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Можно ли ее как-то удалить?

Объявляй в union с теми данными, которые хочешь на её месте.

monk ★★★★★
()
Ответ на: комментарий от DELIRIUM

Тогда на чем сидеть во время еды? Он же не сказал «нужна в первых двух вызовах» (это кстати решается), она нужна в первых двух функциях. Значит стул и место под ним может понадобиться в любой момент.

anonymous
()
Ответ на: комментарий от anonymous

На этом аналогия кончается, на динамическую память затраты всяко не меньше одного статик инта.

anonymous
()

Просто передавайте переменную в функцию явно. Когда уже не будешь держать эти функции удалишь ее если нужно будет. На лицо проблема преждевременной оптимизации...

deterok ★★★★★
()

Язык Си с какого-то стандарта (C99?) умеет вложенные функции.

типа

int fun() {
  int some_var;
  int f1() {
    some_var = 123;
  }
  int f2() {
    some_var = 456;
  }
  return f1() + f2();
}

some_var будет только внутри fun(), f1() и f2(). После выхода из fun память в стеке освободится.

sergej ★★★★★
()
#include<stdio.h>

#define SAVE_COUNTER int old_counter = counter;
#define SET_COUNTER counter = old_counter;

static int counter = 0;

void f1() {counter++;}
void f2() {counter++;}
void f3() {
    SAVE_COUNTER
    counter++;
    SET_COUNTER
}

int main() {
    f1();
    f2();
    f3();
    printf("%i\n",counter);
    
}
red_widowmaker
()

Эх, парень, почитай про то, как используется память в Си (области видимости, виды выделения и т.д.). Будет тебе счастье тогда.

Norgat ★★★★★
()

Можно использовать место, которое она занимает, для другой переменной. Т.е. вначале первая и вторая функция используют эту память для хранения данных счетчика, а затем там можно хранить что-то другое. В C++ я бы использовал ссылку.

Но, вообще, шансов, что так имеет смысл делать крайне мало.

anonymous
()
Ответ на: комментарий от anonymous

имеет смысл

А потом браузер жрёт гигабайты одной страничкой.

anonymous
()

Писаюсь с господ экспертов

ТС спрашивает про «удалить переменную», эксперты что-то вещают о память.

Правильный ответ: у переменной есть область видимости (scope). Если ты определил переменную как static что-то там в топлевеле (не внутри какой-то функции), то «удалить» её нельзя (в C вообще нет такого понятия), она будет видна во всём translation unit'е

deadplace
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.