2015-10-08 5 views
-1

Могу ли я быть уверенным, что преобразование данных всегда преуспевает? Если у меня есть int, и я использую mmap(2), является int, преобразованным в off_t и size_t? Почему все эти разные размеры? И есть ли функция преобразования?C преобразование типа данных

+2

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

+0

Можете ли вы быть уверены, что конверсии всегда будут успешными? Нет. И в вашем конкретном примере 'off_t' даже не является стандартным C, это POSIX. Хотя 'size_t' и' int' гарантированы как минимум 16 бит. –

+1

Кроме того, по _ «Почему все эти разные размеры?» _, Что вы имеете в виду? Вы имеете в виду, почему разные типы не всех одинакового размера, или почему существуют разные типы, или ...? –

ответ

2

Я не уверен в использовании функции mmap, которую вы делаете, поскольку mmap возвращает указатель.

  • Что касается преобразования вы можете в основном конвертировать любой переменной к чему-либо, используя бросок, однако это ваша ответственность, чтобы убедиться, что это будет работать, например:

    int i; 
    double d;  
    d = 42.3; 
    i = (int)d; 
    printf("i = %d", i); 
    

Выход будет 42, без литых (int) некоторые компиляторы, вероятно, будут жаловаться и предупреждать вас о том, что вы потеряете плавучую точность.

  • О, почему из всех этих различных размеров, первая вещь size_t предназначена для представления размера, так что вы можете сильно думать об этом как unsigned int, относительно того, почему не использовать unsigned int, а не typedef'ed «size_t» , см. этот пост unsigned int vs size_t.
+0

Хорошо, но поскольку я не знаю, как определяется 'off_t', может произойти, что я вставляю значение, которое не вписывается в' off_t'. Предположим, что у меня есть 'size_t', определяемый как 64 бита, и я хочу назначить его' off_t', определенному как 32 бита, что произойдет, если 'size_'t' будет удерживать 33 бита? – Kouros

Смежные вопросы