Я видел это слово static
в разных местах кода C; это как статическая функция / класс в C # (где реализация разделяется между объектами)?
(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] Удалить.
я говорю два предложения