MBR (mbr) wrote,
MBR
mbr

Category:

Программизм

Продолжаю поиск кандидатов в команду. Сегодня один признал полное непонимание работы линкера в части внутренней/внешней линковки (internal/external linkage). С семилетним опытом разработки embedded c, позиционирующий себя как senior разработчик. Стыд и срам. Был еще один, но он сам быстро понял ошибку :)

В чем суть вопроса. Есть два модуля, в них определена глобальная переменная x:

foo.c:
int x;

bar.c:
int x;

Что будет? Чтобы понять, необходимо обратиться к ISO, пункт 6.2.2 Linkages of identifiers.

п.2:
In the set of translation units and libraries that constitutes an entire program, each declaration of a particular identifier with
external linkage denotes the same object or function. Within one translation unit, each declaration of an identifier with internal
linkage denotes the same object or function.


Иными словами, если глобальная переменная указана как external linkage (ключевое слово external), она определена во всех этих модулях. При internal linkage (ключевое слово static) - только в том модуле, в котором описана.

А если ключевое слово не указано? Снова смотрим в стандарт, п. 5:

If the declaration of an identifier for an object has file scope and no storage-class specifier, its linkage is external.

Я думаю, теперь можно и не отвечать, что будет, это очевидно ;) Ошибка исключительно новичка, но не специалиста с 7-летним стажем.
Tags: embed
Subscribe

  • Dicke Titten

    Искусственный интеллект заметно прогрессирует. Вот прям от года к году. Перевод уже местами не отличишь от литературного. Надо будет раннего…

  • Май 2022

    Все как-то ни времени ни желания писать о стройке не было. Надо исправляться. Из глобального - купил полупромышленный измельчитель на 20 лошадей.…

  • С ценами странное

    Традиционный уже обзор по поводу финансовых изменений в стране. Доллар на сейчас 59. Глобально по продуктовой корзине я не заметил изменений. Может…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 127 comments

  • Dicke Titten

    Искусственный интеллект заметно прогрессирует. Вот прям от года к году. Перевод уже местами не отличишь от литературного. Надо будет раннего…

  • Май 2022

    Все как-то ни времени ни желания писать о стройке не было. Надо исправляться. Из глобального - купил полупромышленный измельчитель на 20 лошадей.…

  • С ценами странное

    Традиционный уже обзор по поводу финансовых изменений в стране. Доллар на сейчас 59. Глобально по продуктовой корзине я не заметил изменений. Может…