В версии 1.6.1.9 мерзавца для окон я нашел, что "ignorecase=true' в конфигурации был уже установлен по умолчанию.
size_t
гарантированно может содержать количество байтов любого объекта в вашей реализации.
Вот почему тип возврата sizeof
- size_t
.
Так что да, это переносимо.
Как говорили другие, size_t
является правильным и вполне приемлемым для хранения результата sizeof ()
или размера любого представимого объекта в байтах . Вы должны обратить внимание на следующее:
size_t
имеет тот же размер, что и некоторый целочисленный тип без знака . Это не обязательно то же количество байтов, что и самый большой целочисленный тип без знака, unsigned int
, unsigned long
и т. Д. sizeof (size_t)
является реализацией - определенное количество байтов, поэтому использование memcpy
или присвоение ему любого целочисленного типа, кроме uintmax_t
- плохая идея. Я даже не уверен, что можно с уверенностью предположить, что он имеет такой же размер или меньше, чем uintmax_t
. size_t
в двоичный файл и чтение его обратно в size_t
другим процессом, на другой машине или чем-то, скомпилированным с другими параметрами компилятора, может быть опасным для вашего здоровья. size_t
по сети и попытка получить его с помощью буфера sizeof (size_t)
на другой стороне довольно небезопасно. Все из них - стандартные проблемы с любым другим целочисленным типом, кроме unsigned char
. Таким образом, size_t
переносится так же, как и любой другой целочисленный тип.
size_t
по сети и попытка получить его с помощью буфера sizeof (size_t)
на другой стороне довольно небезопасно. Все это стандартно. проблемы с любым другим целочисленным типом, кроме unsigned char
. Таким образом, size_t
переносится так же, как и любой другой целочисленный тип.
size_t
по сети и попытка получить его с помощью буфера sizeof (size_t)
на другой стороне довольно небезопасно. Все это стандартно. проблемы с любым другим целочисленным типом, кроме unsigned char
. Таким образом, size_t
переносится так же, как и любой другой целочисленный тип.
Имеет смысл использовать size_t или ssize_t для буфера, если вы используете malloc () или read (). Для переносимости используйте SIZE_MAX, SSIZE_MAX, sizeof (type-in-your-buffer) и% zd или% zu printf ().
У вас также есть off_t и ptrdiff_t / ssize_t, которые различаются между архитектурами одинаково.
Если вы используете их правильно, они переносимы между архитектурами. В 32-битной системе все они будут иметь ширину 32 бита, а в 64-битной системе все они будут иметь ширину 64 бита. Это то, что вам нужно - размер буфера не может быть больше 32-битного size_t в 32-битной системе, но он может быть намного больше в 64-битной системе.
Вы никогда не должны используйте целые числа, длинные числа или что-нибудь еще. Помимо всего прочего, размер long зависит от платформы (32-разрядный в большинстве 32-разрядных систем, 64-разрядный в 64-разрядных системах Unix, 32-разрядный в 64-разрядной Windows).
Трудно понять, что вы подразумеваете под словом «переносной» в данном случае. Термин «переносимый» допускает множество существенно разных интерпретаций.
Тип size_t
имеет очень конкретное назначение. Он может содержать размер любого объекта в данной реализации. Т.е. это тип, который всегда может получить результат оператора sizeof ()
. Тип size_t
не имеет другой цели, и в рамках своего предполагаемого приложения он на 100% переносим, настолько переносим, насколько может быть все.
О каком «переносном» вы спрашиваете, опять же, нет. ясно.
Одна из причин, по которой, кажется, никто не упоминает об использовании тернарного оператора, по крайней мере, в таких языках, как D, которые поддерживают вывод типов, заключается в том, чтобы позволить выводам типов работать для удивительно сложных типов шаблонов. --- 634022-
Вы не должны предполагать, что size_t - это целое число без знака ( см. Этот ответ ), но я думаю, что он имеет одинаковый диапазон на обеих архитектурах.
Зависит от того, для чего вы используете size_t.
Если вы используете его для определения размера буфера памяти, это будет безопасно, поскольку size_t достаточно велик, чтобы адресовать всю память любой компьютер. Так что, если буфер памяти больше, у вас все равно есть проблема.
С другой стороны, если вы используете его как общее беззнаковое целое число, например, для подсчета количества звезд во Вселенной, у вас может возникнуть проблема в 32-битной системе (не уверен в 64-битных системах).
Единственная серьезная проблема с этим - это попытка получить доступ к довольно большому массиву или большому числу для size_t.
Точно так же, как обычного "int" может быть достаточно на 64- бит, но может вызвать сбой в 32-битной системе, потому что он слишком велик для int в 32-битной системе.