powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загадка: почему "extern int x" и "int x" в одном файле компилируются?
8 сообщений из 8, страница 1 из 1
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38668989
Фотография боевые
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу ответ: потому что функцию можно объявить и определить, а у переменных эти стадии неразделимы. Подробнее:

Погуглил словосочетание "external linkage".

Везде пишут, что это означает, торчит ли объект из модуля сборки (виден компоновщику или не виден компоновщику). Пишут, что вот это:
Код: plaintext
1.
2.
int x = 5;
void func() { return 555; }


по-умолчанию - external linkage. То есть, если собрать объектный файл, то из него будут торчать имена x и func. А если перед ними написать static, то торчать перестанут.

И вот в этих статьях везде пишут, что типа хочешь пиши слово extern, хочешь не пиши - как было external linkage, так и останется.

Но ведь мы (ламеры) помним, что чаще всего слово extern используют, когда хотят сказать: "эта переменная тут не определена, определена где-то в другом модуле, ищи не здесь". Почему тогда мы таким же макаром не пишем extern перед объявлением какой-то функции, которая определена в другой единице сборки, а перед переменной пишем?

Потому что у переменных нет стадии "объявлена"! Стрелять-колотить! Если ты написал int x, ты её сразу и определил. Поэтому, если написать int x в двух разных единицах сборки, это будет то же самое, что определить (написать тело) функцию в двух разных единицах сборки.

Я одного не понял: почему компилятор, скотина, даёт warning, если я пишу:
Код: plaintext
1.
extern int x = 5;


по-сути я ведь написал, что int x имеет external linkage (как и без слова extern) и равно 5.

Эти скрытые смыслы в C++ задолбали. Мля, вы уже определитесь, что означает слово extern - что это external linkage или "тут не определена, ищи в другом месте"?

Короче, открытие состоит в том, что слово extern для объявления или определения функции не меняет НИЧЕГО, а для int оно УБИВАЕТ ОПРЕДЕЛЕНИЕ, оставляя только ОБЪЯВЛЕНИЕ этой переменной. Разрыв штанов и раскол почвы. Священные знания... Застрелиться же можно.

Я осознал эту бодягу и делюсь с другими ламерами.
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38668990
Фотография боевые
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл воткнуть warning, который компилятор даёт на

Код: plaintext
1.
extern int x = 5;


Код: plaintext
1.
warning: 'x' initialized and declared 'extern' [enabled by default]

Чёртово оленеводство!
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669032
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боевыеЭти скрытые смыслы в C++ задолбали.а это не С++, эти ноги из С растут, оставлено для совместимости.
Ну и, вообще говоря, глобальные переменные - зло, если перестать ими пользоваться, то и весь этот гемор с extern и static становится не нужным.
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669033
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то это написано в любом учебнике по С.
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669060
Фотография боевые
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВообще-то это написано в любом учебнике по С.
Учебники редко читают вообще.
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669096
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боевыеУчебники редко читают вообще.тогда не удивляйся, что постоянно будет боевыеРазрыв штанов и раскол почвы. Священные знания... Застрелиться же можно
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669099
Фотография боевые
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychбоевыеУчебники редко читают вообще.тогда не удивляйся, что постоянно будет боевыеРазрыв штанов и раскол почвы. Священные знания... Застрелиться же можно
А я удивляюсь?
...
Рейтинг: 0 / 0
Загадка: почему "extern int x" и "int x" в одном файле компилируются?
    #38669153
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
боевыеegorychпропущено...
тогда не удивляйся, что постоянно будет пропущено...

А я удивляюсь?
йад в аптеке
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загадка: почему "extern int x" и "int x" в одном файле компилируются?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]