Почему объявляют переменную или функциональные помехи в C?

Мне 20 лет, и я начал использовать Emacs прошлым летом, когда я должен кодировать C++ на Linux, и Emacs был единственным редактором, я могу стоять на openSUSE (Kate ужасна, ужасна! - особенно моя машина работы является довольно медленной). Затем я был выигран; нет действительно ничего лучше в мире для ненавистника мыши. Теперь я использую emacs (да в Windows...) для всего вида вещи включая выполнение операций файла с сушеным и играющим Тетрисом ;)

, Что, будучи сказанным я все еще кодирую c# в Visual Studio (переключатель случая к emacs для основного рефакторинга и шаблонной работы, которая является much^100 легче в emacs). ЕСЛИ emacs будет иметь intellisense (который работает), затем, то я выведу текстовый редактор в студии VS (я буду все еще использовать разработчика GUI, хотя, ничто не заменяет это); на данный момент необходимость искать классы является слишком много болью для меня для кодирования c#.NET в emacs.

19
задан extraeee 3 November 2009 в 04:29
поделиться

3 ответа

Есть несколько причин использовать static в C.

При использовании с функциями, да, целью является создание абстракции. Первоначальный термин для обозначения объема файла исходного кода C был «единицей перевода». К статическим функциям можно получить доступ только из одной единицы перевода. Эти статические функции похожи на частные методы в C ++, интерпретируемые свободно (по этой аналогии, единица трансляции определяет класс).

Статические данные на глобальном уровне также недоступны извне единицы трансляции, и это также используется для создания абстракции. Кроме того, все статические данные инициализируются нулем, поэтому статические могут использоваться для управления инициализацией.

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

23
ответ дан 30 November 2019 в 03:29
поделиться

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

Как спецификатор класса хранения, применяемый к локальной переменной, он имеет совершенно другую семантику, но ваша вопрос, кажется, подразумевает, что вы имеете в виду статическую связь.

6
ответ дан 30 November 2019 в 03:29
поделиться

Ключевое слово static имеет несколько применений; Вне функции он просто ограничивает видимость функции или переменной единицей компиляции (файла .c), в которой находится функция или переменная. Таким образом, функция или переменная не становится глобальной. Это хорошо, это продвигает своего рода принцип «необходимости знать» (не раскрывать то, что не нужно раскрывать). Статические переменные этого типа инициализируются нулем, но, конечно, глобальные переменные также инициализируются нулем, поэтому ключевое слово static не отвечает за инициализацию нуля как таковую.

Переменные также могут быть объявлены статическими внутри функции. Эта особенность означает, что переменная не является автоматической, т.е. выделяется и освобождается в стеке при каждом вызове функции. Вместо этого переменная размещается в области статических данных, он инициализируется нулем и сохраняется в течение всего срока действия программы. Если функция изменяет его во время одного вызова, новое измененное значение будет доступно при следующем вызове. Звучит хорошо, но есть веские причины, по которым по умолчанию используется «auto», а «статические» переменные в функциях следует использовать с осторожностью. Вкратце, автоматические переменные более эффективны с точки зрения памяти и необходимы, если вы хотите, чтобы ваша функция была потокобезопасной.

9
ответ дан 30 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: