Что означает «статический» в C?

Дэвид

Я видел это слово staticв разных местах кода C; это как статическая функция / класс в C # (где реализация разделяется между объектами)?

Эли Бендерский
  1. Статическая переменная внутри функции сохраняет свое значение между вызовами.
  2. Статическая глобальная переменная или функция "видны" только в файле, в котором они объявлены.

(1) - более чужая тема, если вы новичок, поэтому вот пример:

#include <stdio.h>

void foo()
{
    int a = 10;
    static int sa = 10;

    a += 5;
    sa += 5;

    printf("a = %d, sa = %d\n", a, sa);
}


int main()
{
    int i;

    for (i = 0; i < 10; ++i)
        foo();
}

Это печатает:

a = 15, sa = 15
a = 15, sa = 20
a = 15, sa = 25
a = 15, sa = 30
a = 15, sa = 35
a = 15, sa = 40
a = 15, sa = 45
a = 15, sa = 50
a = 15, sa = 55
a = 15, sa = 60

Это полезно в случаях, когда функция должна сохранять какое-то состояние между вызовами, и вы не хотите использовать глобальные переменные. Однако будьте осторожны, эту функцию следует использовать очень экономно - она ​​делает ваш код небезопасным для потоков и труднее для понимания.

(2) Широко используется как функция «контроля доступа». Если у вас есть файл .c, реализующий некоторые функции, он обычно предоставляет пользователям только несколько «общедоступных» функций. Остальные его функции должны быть выполнены staticтак, чтобы пользователь не мог получить к ним доступ. Это инкапсуляция, хорошая практика.

Цитата из Википедии :

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

И отвечая на ваш второй вопрос, это не похоже на C #.

Однако в C ++ staticон также используется для определения атрибутов класса (общих для всех объектов одного класса) и методов. В C нет классов, поэтому эта возможность не имеет значения.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Поиск зависимых имен в экземпляре шаблона C ++

реализация списка типов в C ++

Встроенный код на C ++: параметры и их преимущества / недостатки

C ++ преобразование из производного класса в базовый класс с другим номером шаблона

возврат многомерного массива с явным типом возврата в c ++

Сравнение символов c ++

Агрегатная инициализация в C ++

Почему строковый тип приводит к тому, что программа на c ++ не запускается?

Заголовок стандартной библиотеки c ++ не распознается

ошибка: запрос на членскую "таблицу" не в структуре или объединении C

Полиморфные ключи карты в C ++

C # - Как сделать следующий класс базовым, чтобы дочерние классы могли иметь одинаковые свойства, методы?

Определение и объявление функции C

Чтение последнего документа в папке C #

Ошибка приведения C # к дженерикам

Когда мы должны использовать двумерный указатель в объекте c

Альтернатива док-станции / привязки в C ++ для управления списком

C ++ Цикл по объектам и указателям с одним и тем же кодом

Являются ли массивы в C синтаксическим сахаром для указателей?

Прочтите строку из файла на C и извлеките номер ввода

c ++ - конструктор нельзя использовать для инициализации

Выражение указателей в C

Консоль C ++ - новые координаты широты и долготы с использованием азимута и диапазона

неоднозначность имени функции c ++

Остановить цикл for, когда пользователь закончит ввод данных в c

Какие операторы в C имеют неправильный приоритет?

функция-член передачи c ++

Приведение аргументов универсального типа функции в c #

грамматика c ++, тип возвращаемого значения в соответствии с этим кодом.

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Définition de la valeur par défaut dans le dictionnaire Python si la clé est manquante

  3. 3

    Невозможно отобразить данные модели загрузки Spring в Thymeleaf

  4. 4

    Merging legends in plotly subplot

  5. 5

    Spring Boot Upload Multipart 413 Request Entity Too Large

  6. 6

    Ошибка. Невозможно использовать член экземпляра xxx в инициализаторе свойства.

  7. 7

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  8. 8

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  9. 9

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  10. 10

    Ошибка отладчика кода Visual Studio: «Не удалось найти задачу« gcc build active file »

  11. 11

    np.fft.ifft2 делает изображение полностью черным

  12. 12

    Использование виджетов времени / даты Django в настраиваемой форме

  13. 13

    Ошибки компоновщика в GoogleMobileVision при использовании Firebase ML Kit на iOS без кокаподов

  14. 14

    Вызов выполнения .bat в cmd из Java ничего не делает

  15. 15

    Переопределить некоторые стили класса material-ui, но сохранить стили по умолчанию

  16. 16

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  17. 17

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  18. 18

    Сводная таблица из запроса по месяцам в TeraData

  19. 19

    Обновление строк и столбцов с помощью openpyxl из python

  20. 20

    Чтение данных по строкам в Python с использованием openpyxl

  21. 21

    Как создать переменную с использованием класса Color, который включает только выбранные цвета?

популярныйтег

файл