Вы никогда не должны использовать static
по причинам, которые вы приводите.Рассмотрим этот код:
someArray = createArray(parameter, parameter);
someArray2 = createArray(parameter, parameter);
Если вы используете static
, то оба они будут указывать на одну и ту же память, что, вероятно, не то, что вы хотите.Это допустимый код на C, но большинство кодировщиков настоятельно рекомендуют это сделать.Кроме того, имя функции начинается с create , что является очень убедительным признаком того, что вам следует использовать динамическое распределение.
В общем случае static
подходит, когда вам нужно сохранить данныев функции.Никогда не возвращайте указатель на статические переменные.Это может привести к отслеживаемым ошибкам.
Очень простой пример того, где статические переменные могут быть полезны, - простой счетчик.
int count() {
static int c = 0;
c++;
return c;
}
Более сложный пример - генератор случайных чисел, где вынужно сохранить предыдущий номер.Вы можете найти пример здесь.