#1
|
|||
|
|||
кстати, об истории с inline
Alex Korchmar написал(а) к All в Dec 17 18:06:59 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> народ, а никто не может мне объяснить семантический смысл конструкции extern _inline_ int fn() { some shit } ? С точки зрения gcc 2.7.2 или просто здравого смысла - какой, в жопу, может быть extern -- inline и как это должно было работать по задумке этих censored? И правильно ли я понимаю, что надо при следующей встрече все это порождение наркоманского разума выпилить из кода и заменить на одно слово inline без всяких подчеркиваний? > Alex --- ifmail v.2.15dev5.4 |
#2
|
|||
|
|||
Re: кстати, об истории с inline
Konstantin Stefanov написал(а) к Alex Korchmar в Dec 17 10:10:38 по местному времени:
From: Konstantin Stefanov <cstef@mail.ru> On 23.12.2017 18:06, Alex Korchmar wrote: > народ, а никто не может мне объяснить семантический смысл конструкции > extern _inline_ int fn() { some shit } > ? > > С точки зрения gcc 2.7.2 или просто здравого смысла - какой, в жопу, может быть > extern -- inline и как это должно было работать по задумке этих censored? Ты бы хоть у гугля спросил, что ли: https://stackoverflow.com/questions/...ormal-inline-f А вообще это наркоманство из стандарта идет, правда, там это более витиевато написано: 6.7.4.7 (C11) Any function with internal linkage can be an inline function. For a function with external linkage, the following restrictions apply: If a function is declared with an inline function specifier, then it shall also be defined in the same translation unit. If all of the file scope declarations for a function in a translation unit include the inline function specifier without extern, then the definition in that translation unit is an inline definition. An inline definition does not provide an external definition for the function, and does not forbid an external definition in another translation unit. An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit. It is unspecified whether a call to the function uses the inline definition or the external definition. > И правильно ли я понимаю, что надо при следующей встрече все это порождение > наркоманского разума выпилить из кода и заменить на одно слово inline без > всяких подчеркиваний? Нет. Если ты это выкинешь, то надо будет в каждом файле, где используется эта функция, повторить определение. А так она будет inline в том файле, где это написано, и видна как обычная функция в других файлах. -- Константин Стефанов Не убывает в магазинах водка, соотносясь с ресурсами опилок. --- ifmail v.2.15dev5.4 |
#3
|
|||
|
|||
Re: кстати, об истории с inline
Eugene Grosbein написал(а) к Alex Korchmar в Dec 17 14:39:30 по местному времени:
23 дек. 2017, суббота, в 19:06 NOVT, Alex Korchmar написал(а): AK> народ, а никто не может мне объяснить семантический смысл конструкции AK> extern _inline_ int fn() { some shit } ? Для каждой обозванной _inline_ функции компилятор может делать до двух экземпляров кода функции, один обычный и один _inline_ Обычный для взятия адреса функции, например. AK> С точки зрения gcc 2.7.2 или просто здравого смысла - какой, в жопу, может быть AK> extern -- inline и как это должно было работать по задумке этих censored? If you specify both inline and extern in the function definition, then the definition is used only for inlining. In no case is the function compiled on its own, not even if you refer to its address explicitly. Such an address becomes an external reference, as if you had only declared the function, and had not defined it. https://gcc.gnu.org/onlinedocs/gcc/Inline.html AK> И правильно ли я понимаю, что надо при следующей встрече все это порождение AK> наркоманского разума выпилить из кода и заменить на одно слово inline без AK> всяких подчеркиваний? Не было "inline" в языке C до C99, в частности его нету в C90. Для gcc было "inline" в качестве нестандартного расширения, исчезающего при сборке с ключом -std=c89 (или, что то же самое, -ansi), чтобы код мог использовать, к примеру, формально допустимое имя переменной inline. И "_inline_" тут как заменитель. https://gcc.gnu.org/onlinedocs/gcc/A...rnate-Keywords Eugene --- slrn/1.0.2 (FreeBSD) |
#4
|
|||
|
|||
Re: кстати, об истории с inline
Alex Korchmar написал(а) к Eugene Grosbein в Dec 17 13:50:44 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> wrote: AK>> народ, а никто не может мне объяснить семантический смысл конструкции AK>> extern _inline_ int fn() { some shit } ? EG> Для каждой обозванной _inline_ функции компилятор может делать EG> до двух экземпляров кода функции, один обычный и один _inline_ EG> Обычный для взятия адреса функции, например. в результате, если это объявление встречается в двух разных файлах, линкер йопается со словами "ой, они редефайнули!" EG> If you specify both inline and extern in the function definition, EG> then the definition is used only for inlining. In no case is the function ага,то есть это как раз защита от подобного поведения. EG> Не было "inline" в языке C до C99, в частности его нету в C90. зато теперь есть. А вот хитрожопого значения слова extern в этом случае - видимо, нет, как минимум в шланге как минимум с настойкой по умолчанию. спасибо, понятно - выпиливаем наркоманию. > Alex --- ifmail v.2.15dev5.4 |