-
- Например, в самом свежем ЯРе для MSP430 линкер в несознанку уходит с Error[e46]: Undefined external "Foo" referred in ... - Vit(14.08.2013 15:10, ссылка)
- Ну тогда другой вопрос: как эти самые inline функции вы объявляете? - Bill(14.08.2013 15:32)
- пишу в хедере. если вкатать в Си-шник с inline, но без static, а прототип в хедер без inline, то собирается, но нахрена оно такое нужно, а если прототип с inline, то всё та же e46 - Vit(14.08.2013 15:34 - 15:38)
- Все понятно. Только нужно просто в заголовочном файле определить функцию как inline, а в Си файле вообще ничего не нужно определять. Ведь самой функции, как таковой, нет. Компилятор вместо вызова функции генерирует последовательность операторов, Bill(74 знак., 14.08.2013 15:51, ссылка)
- Повторяю - если в хедере объявить inline без static (как в Вашем примере), то e46. Может, ошибки и не будет, если хедер включать только в один модуль, но мне такое чудо не надо - Vit(14.08.2013 15:58, ссылка)
- а в хедере static inline? ничему ж не противоречит? - abivan(14.08.2013 16:07)
- да мне пофигу их мурашки. если нужна inline функция в куче модулей и с записью static inline в хедере этим компилятором/линкером оно собирается, то и ладно. а где-то и без static собиралось. а где-то __inline, а где-то INLINE. если бы не некоторые Vit(53 знак., 14.08.2013 16:13)
- без макроса не обойтись :-) abivan(131 знак., 14.08.2013 16:42)
- :) - Vit(14.08.2013 16:44)
- без макроса не обойтись :-) abivan(131 знак., 14.08.2013 16:42)
- да мне пофигу их мурашки. если нужна inline функция в куче модулей и с записью static inline в хедере этим компилятором/линкером оно собирается, то и ладно. а где-то и без static собиралось. а где-то __inline, а где-то INLINE. если бы не некоторые Vit(53 знак., 14.08.2013 16:13)
- У меня все прекрасно собирается без всяких ошибок. А заголовочный файл является общим для всего проекта. Поэтому он включается во все модули проекта. - Bill(14.08.2013 16:05)
- ЗЫ. Проверьте, плз, есть ли у Вас вызовы одной inline-функции в разных модулях, а то на пустышки линкер не ругается - Vit(14.08.2013 16:19)
- Конечно есть. Только линкер здесь ни причем. До него дело лаже не доходит. Это же inline функции! Bill(212 знак., 14.08.2013 19:19)
- у ЯРя линкеру не нравится C99 - какие у них отношения?:) - Vit(14.08.2013 20:55)
- Я же пример сгенерированного кода привел. Или из него ничего не ясно? - Bill(14.08.2013 22:11)
- Ясно только, что по
одному вызову двух функцийодной подстановке сгенерировалось. Двухвызовов одной функцииодинаковых подстановок не видел. И то, что ошибку описывает IAR, Вас не волнует - Vit(14.08.2013 22:39)- Вы хотите, чтобы я все листинги проекта выложил? - Bill(15.08.2013 06:30)
- Если у Вас IAR под 430, то интересно включено ли C99 и какой уровень оптимизации. Больше ничего не нужно. - Vit(15.08.2013 07:42)
- Увы, у меня AVR V5.51 - Bill(15.08.2013 08:57)
- Если у Вас IAR под 430, то интересно включено ли C99 и какой уровень оптимизации. Больше ничего не нужно. - Vit(15.08.2013 07:42)
- Вы хотите, чтобы я все листинги проекта выложил? - Bill(15.08.2013 06:30)
- Ясно только, что по
- Я же пример сгенерированного кода привел. Или из него ничего не ясно? - Bill(14.08.2013 22:11)
- у ЯРя линкеру не нравится C99 - какие у них отношения?:) - Vit(14.08.2013 20:55)
- Конечно есть. Только линкер здесь ни причем. До него дело лаже не доходит. Это же inline функции! Bill(212 знак., 14.08.2013 19:19)
- Я за Вас рад:) Когда смените компилятор и увидите какую-нить хрень типа е46, вспомните меня:) - Vit(14.08.2013 16:08)
- Я тогда вам обязательно сообщу. ;) - Bill(14.08.2013 16:09)
- ЗЫ. Проверьте, плз, есть ли у Вас вызовы одной inline-функции в разных модулях, а то на пустышки линкер не ругается - Vit(14.08.2013 16:19)
- а в хедере static inline? ничему ж не противоречит? - abivan(14.08.2013 16:07)
- Повторяю - если в хедере объявить inline без static (как в Вашем примере), то e46. Может, ошибки и не будет, если хедер включать только в один модуль, но мне такое чудо не надо - Vit(14.08.2013 15:58, ссылка)
- Все понятно. Только нужно просто в заголовочном файле определить функцию как inline, а в Си файле вообще ничего не нужно определять. Ведь самой функции, как таковой, нет. Компилятор вместо вызова функции генерирует последовательность операторов, Bill(74 знак., 14.08.2013 15:51, ссылка)
- пишу в хедере. если вкатать в Си-шник с inline, но без static, а прототип в хедер без inline, то собирается, но нахрена оно такое нужно, а если прототип с inline, то всё та же e46 - Vit(14.08.2013 15:34 - 15:38)
- Ну тогда другой вопрос: как эти самые inline функции вы объявляете? - Bill(14.08.2013 15:32)
- Например, в самом свежем ЯРе для MSP430 линкер в несознанку уходит с Error[e46]: Undefined external "Foo" referred in ... - Vit(14.08.2013 15:10, ссылка)