myStr.Replace("([^\r])\n", "$1\r\n");
$, возможно, должен быть \
Ключевое слово static
служит двум различным целям в C: то, что я называю продолжительностью (время жизни объекта) и видимостью (откуда вы можете использовать объект). Имейте в виду, что стандарт C на самом деле использует разные слова для этих двух концепций, но при обучении языку я обнаружил, что для начала лучше всего использовать повседневные термины.
При использовании на уровне файла (вне какой-либо функции) он контролирует видимость. Длительность переменных, определенных на уровне файла, уже определена как полная продолжительность программы, поэтому для этого не требуется static
.
Статические переменные на уровне файла невидимы для чего-либо за пределами перевода unit (компоновщик не может его видеть)
При использовании на уровне функции (внутри функции) он контролирует продолжительность. Который'
Пример дополнения ответа Кинопико:
#include <stdio.h>
int foo() {
static int foo = 0;
return ++foo;
}
int main() {
printf("%i\n", foo()); // 1
printf("%i\n", foo()); // 2
}
Это можно использовать, например, для возврата безопасного указателя на локальную функциональную переменную. Или в Objective-C он иногда используется для защиты от повторной инициализации класса:
- (void) initialize
{
static BOOL initialized = NO;
if (initialized)
return;
// …perform initialization…
initialized = YES;
}
Переменная может иметь три типа хранилища:
Глобальные переменные всегда хранятся в статической области. Но чтобы сохранить локальную переменную в статической области, вам потребуется ключевое слово static
. Поскольку статическая переменная не размещается в стеке, вы можете получить доступ к этой переменной при последующих вызовах.
Также ключевое слово static
в глобальной области дает внутреннюю связь переменной. Следовательно, переменная не может быть доступна из какого-либо другого файла с использованием квалификатора extern
.
Вы неправильно употребляете термин «область действия». static
в C не имеет абсолютно ничего общего с областью видимости.
Область действия - это область, в которой отображается имя объекта (переменная, функция, имя типа и т. Д.). В языке C "файловая область" - это самая большая область за всю историю. По этой причине нет смысла ограничивать что-либо одним файлом: просто нечего ограничивать. В C. нет такой вещи, как «глобальная область видимости». Термин «глобальная область видимости» иногда используется неофициально, но в этом случае он имеет то же значение, что и «область действия файла».
Опять же, static
in C абсолютно не имеет ничего общего с областью видимости . static
в C влияет на продолжительность хранения объекта и связь идентификатора. При использовании с объектами (переменными) static
дает объекту статическую продолжительность хранения (т.е. объект существует, пока выполняется программа). И при использовании с идентификаторами нелокальных объектов или функций он дает им внутреннюю связь , что означает, что один и тот же идентификатор относится к одному и тому же объекту в одной единице преобразования (где объект определен), но нет в других единицах перевода.
Вы правы, это называется «статическая связь»: символ объявлен как static
] доступен только в модуле компиляции, в котором он определен.
Другое использование static
будет внутри функции:
void f() {
static int counter = 0;
counter++;
// ...
}
В этом случае переменная инициализируется только один раз и сохраняет свое значение через различные вызовы этой функции, как если бы это была глобальная переменная. В этом примере переменная счетчика
подсчитывает количество вызовов функции.
Я думаю, вам нужно использовать MDC.Set
для установки дополнительных значений контекста. Посмотрите совет № 4 в этом блоге .