LINUX.ORG.RU

Какой смысл у этого кода?

 


0

1
days = div((int &)IN.tv_sec, SECONDS_PER_DAY);

Кусочек кода взят из одного open source проекта. Мне непонятно, что автор хотел с этим "(int&)"?

★★★★

Последнее исправление: pathfinder (всего исправлений: 1)

Мне непонятно, что автор хотел с этим "(int&)"?

Мне тоже. Автора спросить надо. Я вообще впервые в С встречаю конструкцию (int &).

gcc на это ругается→ это не С стопудово.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)

Это похоже на сипипи. Каст в ссылку на int. Какой тип у IN.tv_sec?

ox55ff ★★★★★
()

Это C++ и автор зачем-то кастовал IN.tv_sec в ссылку на int. Возможно изначально оно не int.

dyb4hzvo
()

если это С++, то каст IN.tv_sec в тип «ссылка на int»

Harald ★★★★★
()
Ответ на: комментарий от pathfinder

Это? https://github.com/thiagoralves/OpenPLC_v2/blob/master/core/lib/iec_std_lib.h

Таки там какая-то мешанина C с C++. http://beremiz-devel.2374573.n4.nabble.com/Beremiz-devel-MatIEC-Compiler-errors-on-most-recent-GCC-td56.html

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Ага, они там с fpermissive собирают. Без него «это» не соберется.

pathfinder ★★★★
() автор топика

и на кладбище есть плюсы (с)

olelookoe ★★★
()
Ответ на: комментарий от beastie

Интересно, как оно вообще компиляется? Или его g++ собирают? Там вообще дичь какая-то: ни Makefile, ни CmakeLists.txt нет, только какой-то мутный скрипт в самом корне...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

только какой-то мутный скрипт в самом корне…

Запусти его =)

Zhbert ★★★★★
()
Ответ на: комментарий от beastie

Таки там какая-то мешанина C с C++.

Так и должно быть. Если в определённом месте удобно воспользоваться возможностями C++, то почему так и не сделать? Уже GCC перешёл на такой стиль кода, на чистом Си он уже не собирается.

X512 ★★★★★
()
Ответ на: комментарий от pinus_nigra

То есть вместо секунд берётся адрес переменной?

Нет, насколько я понимаю, они кастуют секунды в адрес. Затем, вызывая div, они кастуют адрес в int. А появилось это вот тут с описанием «Fixed errors on GCC 6.0.3».

Эмбеддед же.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от X512

так ещё и div принимает int, а не ссылку на int.

https://en.cppreference.com/w/c/numeric/math/div

div_t div( int x, int y );

Так что код полный бред, но возможно действительно обходят какой-то баг gcc 6.3.0.

Имхо, проще обновить компилятор или хотя бы оставить коммент чтобы не забыть: «удалить бред при починке бага и ссылку на багзиллу gcc или минимальную версию gcc в которой уже починён баг»

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Так что код полный бред, но возможно действительно обходят какой-то баг gcc 6.3.0.

Это не баг, и уж точно не в GCC. Они просто завязались на то, что time_t будет int, а glibc обещает только какое-нибудь целое со знаком (стандарт C обещает ещё меньше). На amd64 time_t = long, может быть, и на 32-х битах теперь в каких-то ситуациях так же.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Ещё лет пятнадцать будет работать

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.