Если я объявляю static
-функцию в глобальной области видимости, то она доступна только в этом файле, и её extern
уже не получить. Если static
-переменная будет внутри функции, то это понятно, память один раз выделяется за всё время пользования программы. Но я что-то не пойму, что значит static
в глобальной области видимости.
Я думаю что static
-переменная в глобальной области, это то же что и функция в глобальной области, что эту переменную нельзя использовать extern
в другом файле. Потому что глобальная переменная и так как static
выделяется один раз.
Да, вы правы. Если идентификатор объекта или функции объявлен в области видимости файла (англ. file scope) со спецификатором хранения static
, то этот идентификатор будет иметь внутреннюю линковку (англ. internal linkage) и не будет «виден» внутри других единиц трансляции.
Например, имеем следующую ситуацию:
a.c
:
#include <stdio.h>
#include "b.h"
int main(void)
{
extern int variable;
set_value(1000);
printf("%d\n", variable);
}
b.c
:
#include "b.h"
int variable;
void set_value(const int v)
{
variable = v;
}
b.h
:
#ifndef B_H
#define B_H
void set_value(const int);
#endif
Если внутри b.c
объявить variable
с ключевым словом static
, то получим ошибку линковки:
/usr/bin/ld: /tmp/ccJguPPE.o: in function `main':
a.c:(.text+0x10): undefined reference to `variable'
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Устанавливаю MySql на Centos7 следующим образомСначала скачиваю
как известно, если в таблицу добавляется запись, то пересчитываются индексы и сбрасывается кэш запросов, чем больше таблица - тем больше времени...
При работе с таблицей от имени пользователя шифрую и кодирую записи таблицы, при этом все хорошо выводит
Необходимо посчитать общее время работы оборудования в разных промежуткахК примеру приходят следующие данные: