Вопросы с тегом 'linkage'

Linkage описывает, как имена могут или не могут ссылаться на один и тот же объект во всей программе или на единицу. Linkage особенно полезен в С++.
2 отв.

Почему встроенные функции имеют внешнюю связь по умолчанию?

В стандарте говорится, что при объявлении inline void foo(); что foo является встроенной функцией с внешней привязкой (потому что по умолчанию все объявления функций имеют внешнюю привязку). Мне это кажется странным. потому что одно правило прав...
16 февр. '12 в 7:05
2 отв.

Противоречивые результаты между GCC и clang, связанные с [basic.link]/7 в стандарте С++

Этот фрагмент компилируется в clang, namespace A { void f() { void g(); g(); } } void A::g() { } но GCC принимает только код, если g определяется внутри пространства имен A следующим образом: namespace A { void f() ...
28 апр. '15 в 23:09
1 отв.

constexpr глобальные константы в файле заголовка и odr

К сожалению, я несколько смущен насчет constexpr, глобальных констант, объявленных в файлах заголовков, и odr. Короче: можем ли мы заключить здесь https://isocpp.org/files/papers/n4147.pdf что constexpr MyClass const MyClassObj () { return MyC...
24 дек. '15 в 2:35
4 отв.

Почему класс extern "C" С++ (не заголовок) здесь?

Я искал библиотеки SVM и встречал BudgetedSVM. В исходном коде я нашел необычное использование, как это: #sample.h #ifndef SAMPLE_H #define SAMPLE_H //no header included or namespace declared here #ifdef __cplusplus extern "C" { #endif //no hea...
14 февр. '17 в 13:09
3 отв.

Связывание символов в анонимном пространстве имен в пределах обычного пространства имен

В С++ размещение функции или переменной в анонимном пространстве имен делает ее взаимосвязь внутренней, i. е. то же, что и объявление static на уровне файла, но идиоматический С++. Как насчет анонимного пространства имен в обычном пространстве имен...
15 нояб. '10 в 5:53
4 отв.

Интерфейс с объектами С++ через внешние функции "C"

Может ли функция extern "C" принимать или возвращать типы данных, специфичные для С++, такие как ссылки, указатели-к-членам или не-POD-классы (по значению)? Я не могу найти ничего в стандарте С++, который запрещает это. Логично, я бы ожидал, что ста...
21 янв. '12 в 1:02
1 отв.

Может ли лямбда иметь внешнюю связь "С"?

Это, похоже, работает на платформах, которые я пробовал: #include <iostream> // extern "C" linkage extern "C" void foo(void (*fn_ptr)(int)); namespace { struct bar { static void f(int); }; } int main() { // Usually works on most p...
04 сент. '11 в 22:14
1 отв.

Что именно я теряю при использовании extern "C" в С++?

Я пытаюсь создать динамическую библиотеку на С++, которую вызывается существующей программой, написанной в IDL (Interactive Data Language). Я знаю, что мне нужно использовать extern "C", чтобы отключить манипулирование именами, чтобы IDL мог вызывать...
03 дек. '12 в 2:20
2 отв.

С++ Предупреждение: анонимный тип без привязки, используемый для объявления переменной

Я вижу это предупреждение при компиляции (gcc 4.6.3, ubuntu): struct { } a; int main() { } warning: anonymous type with no linkage used to declare variable ‘<anonymous struct> a’ with linkage [enabled by default]. GCC не дает этого преду...
29 июля '13 в 3:21
4 отв.

константные переменные в файле заголовка и фиаско статической инициализации

После прочтения многих вопросов, касающихся инициализации статических переменных, я все еще не уверен, как это относится к переменным const на уровне пространства имен. У меня есть следующий код в файле заголовка config.h, сгенерированном конструк...
26 янв. '11 в 18:44
1 отв.

Стандарт С++: переменные constexpr с пространством имен имеют внутреннюю связь?

Представьте, что у нас есть заголовок foo.h, содержащий следующее: #ifndef FOO_H_ #define FOO_H_ namespace foo { constexpr std::string_view kSomeString = "blah"; } #endif // FOO_H_ Является foo::kSomeString гарантированным наличие внутренней с...
08 сент. '17 в 4:29
1 отв.

Попытка понять §3.3.1/4

Как видно из п. 3.3.1/4, этот фрагмент не компилируется, поскольку он содержит два разных объекта с тем же именем A в глобальном пространстве имен, extern int A; и static int A = 101;. То есть, один имеет внешний, а другой имеет внутреннюю связь. ...
28 сент. '14 в 16:28
2 отв.

Нет привязки к блоку?

У всех переменных, объявленных в блоке, нет ссылки? Например: 1 Если я объявляю статическую переменную: void foo() { static int i; } Будет ли у него внутренняя связь или нет связи? Если нет связи, то зачем статично? 2 Что произойдет, есл...
23 нояб. '11 в 3:32
2 отв.

аргументы шаблона non type

$14.3.2 - "... Аргумент шаблона для непигового шаблона-шаблона без шаблона должен быть одним из: ... постоянное выражение (5.19), которое обозначает адрес объекта со статической продолжительностью хранения и внешней или внутренней привязки или фун...
07 янв. '13 в 12:18
5 отв.

Программа, статически связанная с библиотекой, но все же нуждается в dll для запуска

Есть вещи, которые я не понимаю, когда дело доходит до ссылки... Я пишу программу, используя стороннюю библиотеку (библиотека GEOS). Эта программа имеет зависимость от geos.lib, но для ее работы все еще требуется файл geos.dll. Я читаю этот вопрос, ...
15 июня '12 в 16:23