Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/172: Рейтинг темы: голосов - 172, средняя оценка - 4.74
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700

Ключевое слово static для переменных в файле

18.10.2016, 22:37. Показов 33175. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Много где пишут, если в файле объявить переменную с классом памяти static, то такая переменная будет видна только в том файле где она объявлена. Но на практике так не происходит. Чего я не понимаю?

файл 1
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include "static.c"
 
int main()
{
    printf("%d", v);
    return 0;
}
файл 2(static.c)
C
1
static int v = 54000;
В файле 1 выводится значение статичной переменной v.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2016, 22:37
Ответы с готовыми решениями:

Считать из первого файла ключевое слово и цвет и выделить слово во втором файле
считать из 1 файла ключевое слово и цвет и выделить слово во 2ом файле. файлы html. #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Подсчитать сколько раз появляется каждое ключевое слово языка С в символьном файле с программой на С
Всем привет! Помогите Подсчитать сколько раз появляется каждое ключевое слово языка С в символьном файле с программой на С.(под...

Что означает ключевое слово const?
Что означает ключевое слово const?

24
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
19.10.2016, 18:58
Студворк — интернет-сервис помощи студентам
Неважно, как вы запускаете компилятор, в конечном счете он получает список файлов для компиляции и список директорий, для разрешения ссылок (в которых будет искать исходные файлы).

Разумеется, все необходимые файлы реализации (C/C++) должны быть включены в проект (или указаны в make) и находиться по указанным путям (быть доступными компилятору).

Грубо, трансляция проходит три фазы:
  • Препроцессор обрабатывает C/C++ файлы, выполняя макроподстановки итп
  • Компилятор транслирует полученные на первом этапе промежуточные файлы в объектные
  • Линкер связывает объектные и библиотечные файлы в один исполняемый
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.10.2016, 19:07
Цитата Сообщение от sys_beginner Посмотреть сообщение
откуда компилятор узнает про .с файл если его не включать в код программы явно?
Есть такое понятие - проект. В простейшем случае в нем просто перечислены .c - файлы. Компилятор (студия или другой) транслирует эти файлы по одному и из с-файлов делает .obj - объектные. В последних уже просто машинные коды + некоторая информация для связывания. Потом в дело вступает Линковщик. Он берет всю эту кучу объектных файлов и соединяет их в exe-файл, разрешая все внешние ссылки.
Все эти действия можно произвести и в командной строке, ручками. Но ежели у вас исходных файлов накопилось больше десятка, занятие это муторное. (а у меня, к примеру, в каждом проекте этих файлов по несколько сотен). Можно составить bat-файл, который все команды выполнит. Но он будет делать много лишней (уже сделанной) работы. Так вот, еще на заре создания языка Си (и Юникса) все эти проблемы были поняты, и была создана программа make.
Все фреймворки (в том числе Студия) в том или ином виде эту технику используют. Или вызывают уже готовый make (а он был сделан так здорово, что вполне можно использовать make 30-летней давной) или делают свой, самописный, функционально очень похожий.

Добавлено через 2 минуты
Ну вот, я немного другими словами повторил то, что сказал gazlan. Значит, вполне вероятно, что мы оба недалеки от истины
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
19.10.2016, 19:19  [ТС]
gazlan, Байт,
Большое спасибо! Теперь все на своих местах.

Создал 3 файла, file.h, file.c, main.c в последнем подключил file.h и вызвал его функцию. Файл с кодом file.c не подключил
Далее скомпилировал с помощью команды cc file.h file.c main.c, полученный экзешник успешно запустился и функция из file.c вызвалась!

Добавлено через 1 минуту
При таком раскладе никакие экстерны нафиг не нужны

Добавлено через 28 секунд
Можно просто включать заголовочный файл там где он нужен
Ведь описание может повторяться в отличии от реализации
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13216 / 6848 / 1826
Регистрация: 18.10.2014
Сообщений: 17,369
19.10.2016, 19:24
Цитата Сообщение от sys_beginner Посмотреть сообщение
Но откуда компилятор узнает про .с файл(реализацию интерфейса) если его не включать в код программы явно?
Компилятору этого не надо знать. Это должны знать вы. И вы обязаны сами вручную подать все необходимые .c файлы на вход компилятору.

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

То есть компилятору/линкеру ничего не надо "знать". "Знать", какие .c файлы входят в состав вашей программы должны только вы сами. И вы сами ответственны за то, чтобы передать все необходимые файлы на вход компилятора и линкера. Забудете передать какой-нибудь файл - программа просто не скомпилируется. Сам компилятор за вас в такой ситуации ничего нигде искать не будет.

А разнообразные проекты, makefile и т.п. - это не более чем способы облегчения и автоматизации этого процесса.
1
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
19.10.2016, 19:28  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
То есть компилятору/линкеру ничего не надо "знать". "Знать", какие .c файлы входят в состав вашей программы должны только вы сами. И вы сами ответственны за то, чтобы передать все необходимые файлы на вход компилятора и линкера. Забудете передать какой-нибудь файл - программа просто не скомпилируется. Сам компилятор за вас в такой ситуации ничего нигде искать не будет.
Да. Уже успел проверить, всё так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2016, 19:28

Ключевое слово static
Здорова господа!!! Есть две функции f1() и f2(). #include &lt;iostream&gt; using std::cout; using std::endl; int&amp; f1() ...

Зачем использовать ключевое слово static?
Здравствуйте. Зачем использовать ключевое слово static? И в каких ситуациях нужно использовать именно static?

Ключевое слово static в объявлении функции
Доброго времени суток. У меня возник вопрос по поводу использования слово static в объявлении функции. На сколько мне известно данное...

Зачем и когда нужно писать ключевое слово static
Не как не могу понять зачем и когда нужно писать ключевое слово static. Может вы мне подскажите ?

Классы.Ключевое слово static - выдает ошибку "неразрешенный внешний символ"
Всем доброго времени суток. Изучаю С++ по Шпаку и по урокам на сайте cppstudio.com, предварительно хорошо ознакомившись с ассемблером... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть не большие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru