Если ||
, поскольку замена C# ??
не достаточно хороша в Вашем случае, потому что это глотает пустые строки и нули, можно всегда писать собственную функцию:
function $N(value, ifnull) {
if (value === null || value === undefined)
return ifnull;
return value;
}
var whatIWant = $N(someString, 'Cookies!');
На мой взгляд, ответ Кори верен для «лучшего», но на практике будет работать и простое «int» (при условии, что вы игнорируете системы с 16-битным int). На этом этапе столько кода зависит от того, является ли int 32-битным, что поставщики систем не собираются его менять.
(См. Также, почему long является 32-битным во многих 64-битных системах и почему у нас есть «long long ".)
Однако одним из преимуществ использования int32_t является то, что вы не усугубляете эту проблему!
Вы можете найти копию brg_types.h
Брайана Глэдмана, если у вас нет stdint.h
.
brg_types.h
обнаружит размеры различных целых чисел на вашей платформе и создаст определения типов для общих размеров: 8, 16, 32 и 64 бита.
C не особо заботится о точных размерах целочисленных типов, C99 вводит заголовок stdint.h , который, вероятно, лучше всего подходит для вас. Включите это, и вы можете использовать, например, int32_t
. Конечно, не все платформы могут это поддерживать.
также в зависимости от ваших целевых платформ вы можете использовать автоинструменты для ваша система сборки
она увидит, существует ли stdint.h / inttypes.h, и если они не будут создавать соответствующие typedefs в "config.h"
stdint.h - очевидный выбор, но он не обязательно доступен.
Если вы используете переносимую библиотеку, возможно, она уже предоставляет переносимые целые числа фиксированной ширины.
Например, SDL имеет Sint32
(S означает «подписанный»), а GLib имеет gint32
.
Если stdint.h недоступен для вашей системы, создайте свой собственный. У меня всегда есть файл с именем "types.h", в котором есть определения типов для всех 8-, 16- и 32-битных значений со знаком / без знака.