Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
18.11.2015, 23:28
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
Привет, All. Поставил свежий QT Creator с компилятором min-gw в комплекте и обнаружил забавный сюрприз. Если у вас в объявлении или определении функции используется слово 'inline', а само определение вынесено в cpp файл, то собрать проект не удастся - пойдут ошибки 'undefined reference'. Хотя, это скорее привет от компилятора... Это только у меня так, или действительно нельзя выносить реализацию inline-функций в cpp-файлы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.11.2015, 23:40
|
|||
|---|---|---|---|
|
|||
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
BagaBagaЭто только у меня так, или действительно нельзя выносить реализацию inline-функций в cpp-файлы? Ты, очевидно, не понимаешь, что такое inline и что она делает с генерируемым кодом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 00:33
|
|||
|---|---|---|---|
|
|||
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
BagaBagaПривет, All. ... Это только у меня так, или действительно нельзя выносить реализацию inline-функций в cpp-файлы? Вообще то было можно, но они в этом случае не инлайнятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 02:00
|
|||
|---|---|---|---|
|
|||
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
ЗимарглВообще то было можно, но они в этом случае не инлайнятся. Скорее всего у незаинлайненных inline функций статическая видимость (в пределах файла). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 08:43
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
Dimitry SibiryakovBagaBagaЭто только у меня так, или действительно нельзя выносить реализацию inline-функций в cpp-файлы? Ты, очевидно, не понимаешь, что такое inline и что она делает с генерируемым кодом. Спасибо, КЭП. Я спросил ровно то, что не понимаю. Про inline - это подсказка компилятору, не более того, что вместо вызова данной функции по месту её "вызова" можно подставить её бинарный код. Это сокращает накладные расходы на вызов функции. И имеет смысл только для "коротких" функций. Т.к. подстановка "больших" функций приводит к "разбуханию" исполняемого кода. В прочем, как любая подсказка, inline ничего не гарантирует - компилятор имеет полное право её проигнорировать и всё равно вставить вызов функции (а не подстановку). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 08:50
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
а, забыл добавить, с чего это... Некий С++ гуру (можно найти и ссылочку, но под рукой нет) советует выносить директивы inline (и реализацию функций) из заголовочных файлов в cpp-файлы. Мотивация такая: заголовочный файл - это предоставляемый пользователю интерфейс. Интерфейс должен (чтобы не вводить в "искушение") скрывать детали реализации. inline - это "деталь реализации", и потому как любая деталь должна быть из интерфейса исключена. Для меня вполне понятно, когда компилятор не может применить inline-оптимизацию, если объявление и тело встраиваемой функции разнесены. В конце концов, на корректность программы это не влияет, просто она может быть немного медленнее (и то не факт). Но для меня удивительно, что это может привести к ошибкам компиляции (inline же не должен влиять на сигнатуру функции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 13:12
|
|||
|---|---|---|---|
|
|||
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
BagaBagainline - это подсказка компилятору, не более того, что вместо вызова данной функции по месту её "вызова" можно подставить её бинарный код. А теперь подумай, как и какой код компилятор должен засунуть в объектный файл при компиляции файла А, если в нём используется функция, реализованная в файле Б. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 14:14
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
Для inline подстановки требуется исходник функции. Если он скрыт в cpp, то надо извратиться, чтобы его оттуда достать. По сути inline это то же шаблон, т.е. механизм генерации кода. В данном случае код генерится по месту вызова inline функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 19:30
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
mcureenabДля inline подстановки требуется исходник функции. Если он скрыт в cpp, то надо извратиться, чтобы его оттуда достать. По сути inline это то же шаблон, т.е. механизм генерации кода. В данном случае код генерится по месту вызова inline функции. На самом деле всё это не так. inline не обязывает компилятор встраивать тело фукнции. определение inline-функции не обязано быть доступным. и компилятор может тело вставить, даже если оно не было доступно во время компиляции (не любой, но теоретически это всё возможно). Я не знаю про GCC, а вот microsoft-овский компилятор плюёт на inline с высокой колокольни, ему всё равно, что ты там ему обозвал. подставляет тела функций сам, по своему разумению использует для этого дополнительный шаг глобальной оптимизации, при сборке. По GCC -- думаю, там просто в опциях форсанули inline, надо поглядеть опции командной строки вызова компилятора и линкера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:11
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
Ну что там смотреть то? Открываем документацию и читаем до просветления. https://gcc.gnu.org/onlinedocs/gcc/Inline.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:16
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
Dimitry SibiryakovBagaBagainline - это подсказка компилятору, не более того, что вместо вызова данной функции по месту её "вызова" можно подставить её бинарный код. А теперь подумай, как и какой код компилятор должен засунуть в объектный файл при компиляции файла А, если в нём используется функция, реализованная в файле Б. Dimitry, технически здесь ничего невозможного нет. Разумеется, если это делать не в один проход. Мой старый компилятор такое проглатывал без ошибок. Правда, и подстановку не делал. Для себя я нашёл ответ на ISO C++ https://isocpp.org/wiki/faq/inline-functions Note: It’s imperative that the function’s definition (the part between the {...}) be placed in a header file, unless the function is used only in a single .cpp file. In particular, if you put the inline function’s definition into a .cpp file and you call it from some other .cpp file, you’ll get an “unresolved external” error from the linker. Вероятно, можно докопаться и до пункта стандарта, требующего этого. Но это не принципиально, по крайней мере для меня. Жаль только, что для этого потребовалось двое суток... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:21
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
BagaBaga, А ларчик открывался очень просто: не используй ключевое слово inline. Никогда не используй. Не нужно оно. Вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:24
|
|||
|---|---|---|---|
|
|||
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
White Owl, На правах пятницы. Не нужен 7-9ти проходный компилятор, вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:32
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
ЗимарглWhite Owl, На правах пятницы. Не нужен 7-9ти проходный компилятор, вообще.Вот когда ты поживешь на десятке разных компиляторов, да потаскаешь между ними проекты. Вот тогда ты поймешь что плевать надо на всяческие "улучшения" языка и использовать только самый минимум синтаксиса. И тогда тебе будет без разницы сколько проходов делает компилятор. Базовый синтаксис, без финтифлюшек, понятен всем компиляторам (и даже людям) без дополнительных игр с ключами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 22:42
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
White OwlBagaBaga, А ларчик открывался очень просто: не используй ключевое слово inline. Никогда не используй. Не нужно оно. Вообще.Да ладно! inline это замена #define. Причем, вызов макроса и функции выглядят в тексте одинаково, но макрос может работать иначе. наивная реализация max: Код: plaintext 1. может стать неожиданностью: Код: plaintext 1. -> Код: plaintext 1. Тогда как с inline реализацией max все проще и надежнее. Компилятор сразу проверяет синтаксис, а вызов семантически не отличается от вызова обычной функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
19.11.2015, 23:50
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
ЗимарглНа правах пятницы. Не нужен 7-9ти проходный компилятор, вообще. действительно, 7-9 это очень мало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
20.11.2015, 01:49
|
|||
|---|---|---|---|
QT Creator (min-gw?) не любит inline в cpp? |
|||
|
#18+
mcureenabТогда как с inline реализацией max все проще и надежнее. Компилятор сразу проверяет синтаксис, а вызов семантически не отличается от вызова обычной функции.В inline нет смысла, потому что оптимизатор сам способен развернуть микро-функции если это выгодно. И не важно если они объявлены или не объявлены как inline. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2018730]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 187ms |

| 0 / 0 |
