Size: a a a

2021 August 31

ED

Electronics Designer in Embedded Group
Ммм, эээ, ну да. :) Я говорил применительно к директиве define.
источник

W

Wild_Wind in Embedded Group
Ага, но я ни разу не видел чтобы к функциям писали extern. И если увидел бы ранее, то лишь запутался бы.

В https://t.me/proembedded/303960 есть -Werror -Wpedantic что гарантирует(вроде) что он будет следовать стандарту. Если не стандарт то при таких флагах оно ругается.
источник

PB

Petr Belyaev in Embedded Group
extern разве не помогает линкеру понять, что нужно искать символ в бинарях подключенных либ?
источник

AT

Alexey Tsvetkov in Embedded Group
Нет, не помогает. К линкеру поступают бинари
источник

W

Wild_Wind in Embedded Group
А он и так ищет в объектных файлах. Что с extern что без него.
Для переменных да, если хочешь ссылаться на переменную объявленную в другой единице трансляции, то да, надо extern. Для функций не надо.
источник

ED

Egor Dolgalev in Embedded Group
If no storage-class specifier is provided, the defaults are:

extern for all functions
extern for objects at file scope
auto for objects at block scope
источник

LZ

Leonid Zaliubovskii in Embedded Group
вот потому оно и работает.
источник

SK

Stas Koynov in Embedded Group
 If the declaration of an identifier for a function has no storage-class specifier, its linkage
is determined exactly as if it were declared with the storage-class specifier extern. If
the declaration of an identifier for an object has file scope and no storage-class specifier,
its linkage is external.

пункт 6.2.2  Linkages of identifiers 5 подпункт стандарт С11 n1570 страница 36
источник

ED

Electronics Designer in Embedded Group
Я бы вообще не делал прерывания по кнопке.

Я бы сделал прерывание по таймеру, в котором бы просто опрашивал порт. Если кнопка нажата - инкрементировал счетчик, если отпущена - анализировал бы его значение.

В такой постановке, если значение счетчика меньше некоторого минимума - это дребезг.

Если больше некоторого порога - истинное нажатие. Если больше другого порога - удержание.
источник

LZ

Leonid Zaliubovskii in Embedded Group
про с11 я и не спорю. Но я думаю что похожее и в с99 должно быть. раз оно работает после проверки
источник

SK

Stas Koynov in Embedded Group
я пару недель работал с легаси там было С89 все там было норм без всяких extern
источник

l

linxuil in Embedded Group
Прагма? Специфик для микрософта
источник

AT

Alexey Tsvetkov in Embedded Group
Знатоки, внимание! Правильный ответ. Extern для функций ничего не делает. В моем случае это sdk к китайскому чипу и словом extern они обозначили функции, которые юзеру можно вызывать, а без extern те, которые нельзя. Типа приватных членлв класса.
источник

W

Wild_Wind in Embedded Group
Нет. Это расширение реализованно почти во всех компиляторах.
источник

LZ

Leonid Zaliubovskii in Embedded Group
возьми за основу эту штуку: http://easyelectronics.ru/category/avr-uchebnyj-kurs

тут много подробго описано на базовом уровне.
источник

ED

Electronics Designer in Embedded Group
extern позволяет компилятору понять, что не надо ругаться на символ, объявленный с этим атрибутом, даже если он не определен в текущей единице трансляции. Когда компилятор видит обращение к extern-переменной, он вставляет в объектный файл пометку для линкера, чтобы он ее искал в других объектных файлах. Если и в других объектных файлах ничего не найдено, возникает ошибка "unresolved external ..."
источник

LZ

Leonid Zaliubovskii in Embedded Group
это если о плюсах заговорим и там есть атрибут hide
источник

W

Wild_Wind in Embedded Group
И при множественных инклудах даже работает быстрее.
источник

W

Wild_Wind in Embedded Group
fvisability ага
источник

AT

Alexey Tsvetkov in Embedded Group
Так для переменных работает.
источник