__>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ?
На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?
ты наверно хочешь узнать, является ли это константным выражением, и может ли оно быть применено для инициализации размеров массивов и т.п.
Приведенный пример не годится для выяснения этого потому что там (при инициализации автоматической переменной) можно любую функцию поставить, даже не инлайн.
Здравствуйте, Vamp, Вы писали:
__>>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ? V>На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох?
Все правильно код компилируется, но в C99 линкер выдает ошибку.
Здравствуйте, _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.]
[Даю очевидные ответы на риторические вопросы]
Кстати, в тему об inline.
Было замечено следующее поведение gcc. Если фунция объявлена просто как static и нигде в единице компиляции не используется, то выдается warning. Если же функция объявлена как static inline, то warning'а нет, даже если она нигде не используется.
Интуитивно оно понятно, почему так, но в документации четкого описания такого поведения не нашел.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Любопытно. Я всегда считал, что inline в C99 аналогичен по семантике C++-ному. Даже мысли не было, что нужно изучить эту часть стандарта! (Эта деталь описана в ISO/IEC 9899, 6.7.4:6).
Интересно, какая логика стоит за таким решением? Не могу представить ни одной ситуации, когда было бы полезно отдельно определять inline и не-inline версии функции, тем более что их поведение должно быть полностью одинаково.
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, _nn_, Вы писали:
__>>>>Корректен ли этот код с точки зрения: C89, C++03, C99, C++0x ? V>>>На первый взгляд, абсолютно корректен в любом диалекте, в котором есть inline — что исключает C89. А где подвох? __>>Все правильно код компилируется, но в C99 линкер выдает ошибку. V>Я обычно использую extern inline, только не уверен можно ли это в c99.
On 12.07.2011 9:17, quodum wrote:
> Любопытно. Я всегда считал, что inline в C99 аналогичен по семантике C++-ному. > Даже мысли не было, что нужно изучить эту часть стандарта! (Эта деталь описана в > ISO/IEC 9899, 6.7.4:6).
Я участвовал в одном проекте на С, собираемом одно время примерно на 40 разных
платформ. Там inline-или все функции исключительно #define-ами