forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 23.12.2017, 19:55
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию кстати, об истории с 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  
Старый 25.12.2017, 12:55
Konstantin Stefanov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 25.12.2017, 14:55
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 25.12.2017, 15:55
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию 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
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:30. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot