Как правильно использовать extern и static? - PullRequest
3 голосов
/ 28 марта 2012

В C, когда указывается спецификатор extern или static для функции, каков правильный синтаксис использования - только на декларацию? по определению? и то и другое? это то же самое с переменной?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 28 марта 2012

Объявление extern Функция:

Ключевое слово extern следует использовать только при объявлении (не определении) функции. Обратите внимание, что функции по умолчанию имеют внешнюю связь, поэтомуключевое слово extern в объявлении функции является избыточным.

extern void doSomething();

Определение extern Функция:

Определение функции не следует указывать с ключевым словом extern.Определение может быть в другом файле cpp.

void doSomething()
{
}

Объявление функции static:
A static ограничивает использование этой функции модулем перевода вкоторый объявлен.Вам необходимо указать ключевое слово при его объявлении.

static void doSomething();

Определение static Функция:
Определение функции должно быть определено в том же TU.Не нужно указывать ключевое слово static при его определении.

void doSomething()
{
}

Использование переменной extern:
Вы объявляете переменную как extern, когда хотитедля совместного использования одной и той же глобальной переменной в разных единицах перевода.
Вам необходимо объявить переменную с ключевым словом extern, в то время как вам нужно определить ее в одном и только одном файле cpp.

file1.ч

extern int i;

file1.cpp

#include"file1.h"

int i = 10;

file2.cpp

#include "file1.h"

int main()
{
    i = 40;
    return 0;
}
0 голосов
/ 28 марта 2012

Я не знаю, что вы имеете в виду в словах on call, но я предполагаю, что вы хотите спросить о definition и declaration.

Ключевое слово extern означает "Эта переменная"/ функция определена где-то еще ", поэтому бессмысленно использовать ее в определении.Вы должны использовать его только в объявлении.

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

0 голосов
/ 28 марта 2012

материал, определенный с помощью static , принадлежит текущему модулю компиляции (модулю).Такие вещи НЕ видны вне устройства

extern объявляет что-то, что где-то определено

...