Загадка inline
От: _nn_ www.nemerleweb.com
Дата: 11.07.11 13:35
Оценка: 8 (1)
Вроде не было.

Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?
inline int add(int i, int j) { return i + j; }

int main()
{
  int i = add(4, 5);
  return i;
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Загадка inline
От: Vamp Россия  
Дата: 11.07.11 13:41
Оценка: +4
__>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?
На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?
Да здравствует мыло душистое и веревка пушистая.
Re: Загадка inline
От: dilmah США  
Дата: 11.07.11 13:50
Оценка:
ты наверно хочешь узнать, является ли это константным выражением, и может ли оно быть применено для инициализации размеров массивов и т.п.

Приведенный пример не годится для выяснения этого потому что там (при инициализации автоматической переменной) можно любую функцию поставить, даже не инлайн.
Re[2]: Загадка inline
От: _nn_ www.nemerleweb.com
Дата: 11.07.11 14:24
Оценка:
Здравствуйте, Vamp, Вы писали:

__>>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?

V>На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?

Все правильно код компилируется, но в C99 линкер выдает ошибку.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Загадка inline
От: alexeiz  
Дата: 11.07.11 15:13
Оценка: 26 (5) :)
Здравствуйте, _nn_, Вы писали:

__>Вроде не было.


__>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?

__>
__>inline int add(int i, int j) { return i + j; }

__>int main()
__>{
__>  int i = add(4, 5);
__>  return i;
__>}
__>


C99 определяет inline отлично от C++. Вот здесь есть объяснение: http://clang.llvm.org/compatibility.html#inline.

В C89 нет inline.
Re[3]: Загадка inline
От: Vain Россия google.ru
Дата: 11.07.11 20:33
Оценка:
Здравствуйте, _nn_, Вы писали:

__>>>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?

V>>На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?
__>Все правильно код компилируется, но в C99 линкер выдает ошибку.
Я обычно использую extern inline, только не уверен можно ли это в c99.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Загадка inline
От: ДимДимыч Украина http://klug.org.ua
Дата: 11.07.11 21:56
Оценка:
Кстати, в тему об inline.
Было замечено следующее поведение gcc. Если фунция объявлена просто как static и нигде в единице компиляции не используется, то выдается warning. Если же функция объявлена как static inline, то warning'а нет, даже если она нигде не используется.
Интуитивно оно понятно, почему так, но в документации четкого описания такого поведения не нашел.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: Загадка inline
От: quodum  
Дата: 12.07.11 05:17
Оценка: +1
Здравствуйте, alexeiz, Вы писали:

A>C99 определяет inline отлично от C++. Вот здесь есть объяснение: http://clang.llvm.org/compatibility.html#inline.


Любопытно. Я всегда считал, что inline в C99 аналогичен по семантике C++-ному. Даже мысли не было, что нужно изучить эту часть стандарта! (Эта деталь описана в ISO/IEC 9899, 6.7.4:6).

Интересно, какая логика стоит за таким решением? Не могу представить ни одной ситуации, когда было бы полезно отдельно определять inline и не-inline версии функции, тем более что их поведение должно быть полностью одинаково.
Re[4]: Загадка inline
От: _nn_ www.nemerleweb.com
Дата: 12.07.11 06:42
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, _nn_, Вы писали:


__>>>>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?

V>>>На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?
__>>Все правильно код компилируется, но в C99 линкер выдает ошибку.
V>Я обычно использую extern inline, только не уверен можно ли это в c99.

Можно.
В данном примере можно и static inline.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Загадка inline
От: MasterZiv СССР  
Дата: 12.07.11 07:22
Оценка:
On 12.07.2011 9:17, quodum wrote:

> Любопытно. Я всегда считал, что inline в C99 аналогичен по семантике C++-ному.

> Даже мысли не было, что нужно изучить эту часть стандарта! (Эта деталь описана в
> ISO/IEC 9899, 6.7.4:6).

Я участвовал в одном проекте на С, собираемом одно время примерно на 40 разных
платформ. Там inline-или все функции исключительно #define-ами

Теперь понимаю, почему
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.