Easyelectronics.ru

Электроника для всех
Текущее время: 07 июл 2020, 22:03

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 14:59 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
два элементарных сишных файла

main.h
Код:
inline int set_bits()
{
    return 34;
}

main.c

Код:
#include "main.h"

int main()
{
    set_bits();
}


лежат рядом.
кто сможет ответить, только взглянув, будет это всё компилиться или нет. всего лишь компилиться. ответили?

а теперь проверяйте.
всё равно не угадали

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 15:55 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
Скомпилируется, конечно.

А вот соберется ли, зависит от того, как собирать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 15:56 
Заглядывает иногда

Зарегистрирован: 16 сен 2018, 10:41
Сообщения: 124
Логично, чо :) И я думаю оно ещё от компилятора зависит.
А вообще пример интересный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 16:02 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
Цитата:
от компилятора зависит.


Бинго! точно не жульничал...? я тут 4 дня потратил...

MSVC компилирует на ура.
GCC - ни в какую...

в стандартах С - тишина.

дико бесит. блюющий_смайлик.mpg

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 16:37 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 681
Откуда: Германия
cheblin писал(а):
в стандартах С - тишина.


ISO/IEC 9899:1999 6.7.4.8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 16:48 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
O! спасибо искал static inline / extern inline а оно вон как с подвывертом

Изображение

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 16:59 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
будет ли скомпилирован main.c
Код:
inline int set_bits()
{
   return 34;
}

int main()
{
   set_bits();
}


? GCC говорит
undefined reference to `set_bits'

годнота!

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:16 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2732
Откуда: Санкт-Петербург
Прикольно, отвык я от чистого Си. clang - собирает как C++, не собирает как C.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:22 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
какая гадость эта ваша заливная рыба(с)

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:32 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 204
cheblin писал(а):
будет ли скомпилирован main.c

? GCC говорит
undefined reference to `set_bits'

годнота!


С первым предупреждение - отсутствие прототипа. Логично, потому что в другом файле.
Со вторым без замечаний.
С и плюсы. Древний WinAvr, он же GCC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:34 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
Изображение

Цитата:
gcc -v

Thread model: posix
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

Изображение

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:37 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
cheblin писал(а):
O! спасибо искал static inline / extern inline а оно вон как с подвывертом

Изображение

Все прекрасно компилится и линкуется. Только опишите правильно.
https://gcc.gnu.org/onlinedocs/gcc/Inline.html
добавляем в main.c где искать эту функцию
extern inline int set_bits();
И все чудесно компилиться.
Просто компилятору нужно объяснить в какой таблице имен нужно ее искать. Обычная таблица имен содержит адреса вызываемых функций. А у вас inline, то есть не адрес на функцию а непосредственно кусок кода который необходимо вставить в месте вхождения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:39 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
MSVC - прекрасно компилиться
выше отписывались - тоже

вопрос - кто есть ху так и не раскрыт.
Цитата:
А у вас inline, то есть не адрес на функцию а непосредственно кусок кода который необходимо вставить в месте вхождения.

ой не факт. никто не гарантирует что функция будет заинлайнена.
это просто ни к чему не обязывающий хинт. который гарантирует только то - то никто из кода не может дергать функцию по указателю.

_________________
unirail.org


Последний раз редактировалось cheblin 05 мар 2019, 17:44, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:43 
Старожил

Зарегистрирован: 10 мар 2012, 11:11
Сообщения: 204
.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 17:58 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Вот возьмите ваш исходник, ничего не меняйте, и включите опцию -O3. Все скомпилиться из коробки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 18:22 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 188
void1509 писал(а):
Просто компилятору нужно объяснить в какой таблице имен нужно ее искать.

leaky abstraction? ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 18:27 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
siarzhuk писал(а):
leaky abstraction? ;-)

А это тут причем ? Поясните свою мысль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 18:52 
Заглядывает иногда

Зарегистрирован: 16 сен 2018, 10:41
Сообщения: 124
cheblin писал(а):
Цитата:
от компилятора зависит.

Бинго! точно не жульничал...? я тут 4 дня потратил...

Не, не жульничал. Просто компилятор пишу, поэтому в курсе как это работает :)
Там всё зависит от внутреннего устройства компилятора, как именно он будет это хранить и инлайнить. Вплоть до сохранения set_bits как константы с попыткой линковки кода "34;", поэтому и ошибки могут быть самые неожиданные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 18:58 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 188
void1509 писал(а):
siarzhuk писал(а):
leaky abstraction? ;-)

А это тут причем ? Поясните свою мысль.

Когда "компилятору нужно объяснить в какой таблице имен нужно ее искать" - это и значит, что особенности реализации из под абстракций "проглядывают". ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 19:06 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
siarzhuk писал(а):
void1509 писал(а):
siarzhuk писал(а):
leaky abstraction? ;-)

А это тут причем ? Поясните свою мысль.

Когда "компилятору нужно объяснить в какой таблице имен нужно ее искать" - это и значит, что особенности реализации из под абстракций "проглядывают". ;-)

По моему абстракция тут не причем. Там есть набор ключей который объясняет компилятору - чего от него хотят. Тогда его поведение становится предсказуемым.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 19:12 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
void1509 писал(а):
Вот возьмите ваш исходник, ничего не меняйте, и включите опцию -O3. Все скомпилиться из коробки.

не спортивно.
мне лучше свой код переписать, чтобы он в итоге всюду запускался, чем навязывать пользователю моего кода, компилировать только с оптимизацией...

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 19:19 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 692
Просто -O3 включает целый пакет ключей, что бы их не расписывать - указал короткую запись.

PS: Я думаю в MSVC скомпилировалось по той же причине (O3 включено).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 19:37 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2570
1. Набуя в заголовочном файле функцию реализовывать?
2. Компилятору путь до папки с этим хедером указали?

Хер..ёй страдать потом на компилятор тошнить...
От такого кода тошнит.

Делайте нормально и всё будет компилиться и собираться.
Не сношайте мозг.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 19:49 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 3378
Откуда: Китай, Пекин
Pingvin писал(а):
1. Набуя в заголовочном файле функцию реализовывать?


потому что могу

Код:
extern inline void p2_StringField_SET_STR(const char16_t src[], VarPackData dst)
{
    p2_StringField_SET(src,  strlen16(src), dst);
}

extern inline void p3_integer_SET(int32_t src, IntegeRData dst)
{
    set_bytes((uint32_t)(src), 4, dst->base.bytes,  0);
}
extern inline v3ListData p3_test_SET(const v3ListData src, IntegeRData dst)
{
    if(dst->base.field_bit != 32)  set_field(dst, 32, 0);
    return push_data(src, dst, 0);
}

extern inline void p4_x_SET(float src, v3ListData dst)
{
    set_bytes(*(uint32_t*) & (src), 4, dst->base.bytes,  0);
}
extern inline void p4_y_SET(float src, v3ListData dst)
{
    set_bytes(*(uint32_t*) & (src), 4, dst->base.bytes,  4);
}
extern inline void p4_z_SET(float src, v3ListData dst)
{
    set_bytes(*(uint32_t*) & (src), 4, dst->base.bytes,  8);
}
extern inline Vector3Bytes p4_w_SET(Vector3Bytes src, v3ListData dst)
{
     if(dst->base.field_bit != 96)set_field(dst, 96, 0);
    return push_bytes(src, dst, 0);
}


предлагаете на каждую такую примитивную, но очень нужную функцию писать отдельную декларацию? но зачем??? В смысле Набуя ???
а потом взгляните сюда там INLINER как раз и есть то самое extern inline

предлагаете в 2 раза увеличить объём???

Цитата:
2. Компилятору путь до папки с этим хедером указали?


?? перечитайте ... в ветке есть пример использования inline функции в одном файле

_________________
unirail.org


Последний раз редактировалось cheblin 05 мар 2019, 19:58, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: знатокам и любителям с-ей
СообщениеДобавлено: 05 мар 2019, 21:57 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
Откуда: Чобля - долбаный кетайец
Ну что, орлята еще не научились летать?
static inline int Foo(void) и __attribute__((always_inline)) static inline int Foo(void)
extern тоже годится.
А вот про то, что инлайн - это всего лишь рекомендация, наверно мало кто знает. Зато есть атрибут "завсегда инлайн", и с ним не поспоришь.

Вложение:
Без-имени-1.jpg
Без-имени-1.jpg [ 133.83 Кб | Просмотров: 864 ]

Вложение:
Без-имени-2.jpg
Без-имени-2.jpg [ 140.33 Кб | Просмотров: 864 ]


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB