The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз набора компиляторов GCC 13, opennews (??), 26-Апр-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


11. "Релиз набора компиляторов GCC 13"  +4 +/
Сообщение от _RORO_ (ok), 26-Апр-23, 17:43 
Всякие int,long размер которых не определён спецификацией это ни рыба ни мясо. Есть смысл или чётко определять размер (uint32,int32,int64,float32,float64...) или выводить тип автоматически
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

57. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (60), 26-Апр-23, 21:28 
Поэтому Си и завоевал популярность.
int - наиболее подходящий для аппаратной платформы.
long в два раза длиннее int.  

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

Ответить | Правка | Наверх | Cообщить модератору

64. "Релиз набора компиляторов GCC 13"  +8 +/
Сообщение от Аноним (64), 26-Апр-23, 21:46 
> long в два раза длиннее int.

Садись, два.

Ответить | Правка | Наверх | Cообщить модератору

68. "Релиз набора компиляторов GCC 13"  –1 +/
Сообщение от Аноним (60), 26-Апр-23, 21:52 
однобайтное целое (англ. tiny int) — 8 бит, -128 ÷ 127;
короткое целое (англ. short int) — 16 бит, −32 768 ÷ 32 767;
длинное целое (англ. long int, также int32) — 32 бита, −2 147 483 648 (−231) ÷ 2 147 483 647 (231−1);
двойное длинное целое (англ. long long int, также large int, big int, int64) — 64 бита, -9 223 372 036 854 775 808 (−263) ÷ 9 223 372 036 854 775 807 (263−1);

Википедия. Чтобы быстро. для 32 битной шины.

Ответить | Правка | Наверх | Cообщить модератору

83. "Релиз набора компиляторов GCC 13"  +4 +/
Сообщение от Аноним (-), 26-Апр-23, 22:19 
> Википедия. Чтобы быстро. для 32 битной шины.

Небось еще и русская, где это какой-то отсебяша накорябал? А надо было читать стандарты. В стандарте регламентируется только минимальная ширина. Реальная в энной реализации может быть и больше.

Более того - почти весь код уверен что в int лезет минимум 32 бита. Хотя по стандарту сказано лишь про не менее 16. И попытавшись вон там для AVR заказать вот это вот для скорости (по стандарту же ок!) можно нехило лаптем щей откушать - при том что формально это будут баги в коде.

Ни про какие 32-битные или сколько там еще шины в стандартах вообще ничего не сказано. Как впрочем и про допустим стэк и его использование локальными переменными, и прочие типовые допущения которые ниоткуда не следуют.

Ответить | Правка | Наверх | Cообщить модератору

94. "Релиз набора компиляторов GCC 13"  +/
Сообщение от FF (?), 26-Апр-23, 23:09 
в Cortex M int и long 32 бита, а long long уже 64
Ответить | Правка | К родителю #68 | Наверх | Cообщить модератору

95. "Релиз набора компиляторов GCC 13"  +/
Сообщение от FF (?), 26-Апр-23, 23:10 
и опять же это компиляторы и задефайнено так, это же программная условность
Ответить | Правка | Наверх | Cообщить модератору

73. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (60), 26-Апр-23, 21:58 

#include <stdio.h>
void main(){
        int a;
        long b;
        printf("%d %d\n",sizeof(a),sizeof(b));
        return;
}

вывод: 4 8
4 байта и 8 байт соответственно

Ответить | Правка | К родителю #64 | Наверх | Cообщить модератору

75. "Релиз набора компиляторов GCC 13"  +1 +/
Сообщение от Аноним (74), 26-Апр-23, 22:01 
Это хреновые способ доказать что-то. Ваша конкретная машина - не все возможности реализации си на той или иной платформе. Ну вон на AVR можно int как 32 бита сделать. А можно и как 16. Оба варианта, кстати, одинаково валидны по стандарту, второй быстрее, толко де-факто много кода non compliant и вести себя будет криво. Хотя формально это баг именно кривого кода удумавшего что int видите ли может быть более 16 битов, чего никто не обещал.
Ответить | Правка | Наверх | Cообщить модератору

81. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (60), 26-Апр-23, 22:09 
Профессор, когда-то я это знал, а потом основательно забыл. (с) почти ))
Потому что на практике не встречался с этими платформами.
Ответить | Правка | Наверх | Cообщить модератору

86. "Релиз набора компиляторов GCC 13"  +1 +/
Сообщение от Аноним (-), 26-Апр-23, 22:21 
> Потому что на практике не встречался с этими платформами.

Ну как бы если мы про стандарты и код, при этом не важно с какими платформами кто встречался. Важно как оно в стандарте определено. И вот с этим на самом деле там довольно так себе, много фривольностей и недоопределенных вещей что ведет к UB.

Ответить | Правка | Наверх | Cообщить модератору

105. "Релиз набора компиляторов GCC 13"  +2 +/
Сообщение от Аноним (64), 27-Апр-23, 00:54 
> Потому что на практике не встречался с этими платформами

Ну, с 64-битными Виндой и Линухом-то все встречались. На первой long 32 бит, на второй -  64.

Ответить | Правка | К родителю #81 | Наверх | Cообщить модератору

156. "Релиз набора компиляторов GCC 13"  +/
Сообщение от n00by (ok), 27-Апр-23, 11:17 
Эпичнее встречи с

int a[sizeof WCHAR];

Когда оно работает в Windows с двухбайтным WCHAR, а потом переносят в Linux и оно вроде работает, но в память не всегда помещается.

Ответить | Правка | Наверх | Cообщить модератору

214. "Релиз набора компиляторов GCC 13"  +/
Сообщение от InuYasha (??), 27-Апр-23, 17:28 
> int a[sizeof WCHAR];

rol, ты мне немного мозг подамажил таким примером )

Но это ещё что! Когда у тебя сетевой протокол завязан на sizeof, начинается веселье в степени N! Сдишь ты такой, никого не трогаешь. И тут коннектится клиент с винды или со смака.

Ответить | Правка | Наверх | Cообщить модератору

259. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (228), 28-Апр-23, 00:39 
Маршалинг должен быть.
Ответить | Правка | Наверх | Cообщить модератору

268. "Релиз набора компиляторов GCC 13"  +/
Сообщение от n00by (ok), 28-Апр-23, 07:36 
>> int a[sizeof WCHAR];
> rol, ты мне немного мозг подамажил таким примером )

Да накосячил с арифметикой. Сейчас не найду ту тему на ЛОРе, массив создавался для задачи типа "посчитать количество каждого возможного символа в тексте" и на Линуксе то ли несколько минут уходил в подкачку, то ли дома работал, а на работе падал.

Ответить | Правка | К родителю #214 | Наверх | Cообщить модератору

233. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (228), 27-Апр-23, 22:41 
Что оно?
1. WCHAR в винде определен, а linux нет?
2. wchar_t имеет платформозависимый размер?
Ответить | Правка | К родителю #156 | Наверх | Cообщить модератору

267. "Релиз набора компиляторов GCC 13"  +/
Сообщение от n00by (ok), 28-Апр-23, 07:28 
> Что оно?

В моём сообщении единственная строка с кодом:

int a[sizeof WCHAR];

> 1. WCHAR в винде определен, а linux нет?

"переносят в Linux" означает, что код запускают в Linux, адаптируя, при необходимости.

> 2. wchar_t имеет платформозависимый размер?

"работает, но в память не всегда помещается" является ответом на этот вопрос. Я забыл там 1 << но InuYasha почему-то догадался.

Ответить | Правка | Наверх | Cообщить модератору

211. "Релиз набора компиляторов GCC 13"  +1 +/
Сообщение от Анонимemail (211), 27-Апр-23, 16:58 
неа, оно так не работает. оно зависит не только от апаратуры но и от ос.
например long:
OS    Architecture    Size of "long" type
Windows    IA-32            4 bytes
    Intel® 64    4 bytes
Linux    IA-32             4 bytes
    Intel® 64    8 bytes
mac OS    Intel® 64    8 bytes
Ответить | Правка | К родителю #73 | Наверх | Cообщить модератору

274. Скрыто модератором  +/
Сообщение от Аноним (-), 28-Апр-23, 10:08 
Ответить | Правка | К родителю #73 | Наверх | Cообщить модератору

169. "Релиз набора компиляторов GCC 13"  +/
Сообщение от InuYasha (??), 27-Апр-23, 12:45 
ага, до первого хардкода или ошибки с sizeof()
Ответить | Правка | К родителю #57 | Наверх | Cообщить модератору

170. "Релиз набора компиляторов GCC 13"  –1 +/
Сообщение от InuYasha (??), 27-Апр-23, 12:48 
Это был закос под кроссплатформенность и одновременно упрощение, который в итоге вылился в гигантский гемор. Я тоже пишу целый огромный хэдер только для стандартизации типов. Причём, ровно так как ты и написал. Потому что меня бесят _t для примитивов.
Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру