Размер интервала в C на различной архитектуре

Я соглашаюсь с "Чем-либо, что Вы не можете сказать от подписи метода". Это могло бы также означать объяснять, что возвращает метод/функция.

Вы могли бы также хотеть использовать Сфинкс (и reStructuredText синтаксис) в целях документации в Ваших docstrings. Тем путем можно включать это в документацию легко. Поскольку пример проверяет, например, repoze.bfg, который использует это экстенсивно ( пример документации файла , в качестве примера ).

Другая вещь можно вставить docstrings, также doctests. Это могло бы иметь смысл особенно для модуля или docstrings класса, поскольку можно также показать, что путь, как использовать его и иметь это тестируемое одновременно.

10
задан Jon Seigel 8 July 2010 в 19:03
поделиться

7 ответов

Вам нужен , который будут реализовывать компиляторы, соответствующие стандарту C («C99»). К сожалению, это не относится к Microsoft. К счастью, проект с открытым исходным кодом предоставляет для Windows, см. msinttypes .

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарте, однако большинство типов в заголовке не являются обязательными по отдельности. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

какие компиляторы, соответствующие стандарту C ("C99"), будут реализовывать. К сожалению, это не относится к Microsoft. К счастью, проект с открытым исходным кодом предоставляет для Windows, см. msinttypes .

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарте, однако большинство типов в заголовке не являются обязательными по отдельности. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

какие компиляторы, соответствующие стандарту C ("C99"), будут реализовывать. К сожалению, это не относится к Microsoft. К счастью, проект с открытым исходным кодом предоставляет для Windows, см. msinttypes .

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарте, однако большинство типов в заголовке не являются обязательными по отдельности. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

это не включает Microsoft. К счастью, проект с открытым исходным кодом предоставляет для Windows, см. msinttypes .

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарте, однако большинство типов в заголовке не являются обязательными по отдельности. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

это не включает Microsoft. К счастью, проект с открытым исходным кодом предоставляет для Windows, см. msinttypes .

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарте, однако большинство типов в заголовке не являются обязательными по отдельности. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарт, однако, большинство типов в заголовке по отдельности необязательны. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

Это позволит вам использовать int32_t и uint32_t , плюс 8, 16, 64 и многие другие.

Примечание: сам заголовочный файл не является обязательным в стандарт, однако, большинство типов в заголовке по отдельности необязательны. Некоторые нет. Наиболее часто используемые типы - необязательные, но ничто не мешает вам использовать обязательные. Дело в том, что если реализация вообще предоставляет заголовок, на практике они определяют все типы.

15
ответ дан 3 December 2019 в 13:56
поделиться

C99 в stdint.h определяет такие типы, как int8_t и int16_t .

13
ответ дан 3 December 2019 в 13:56
поделиться

Нет, стандарт C определяет минимальные размеры для целочисленных типов, но не дает никаких гарантий относительно максимальных размеров.

Реализация должна предоставлять типы intN_t , если типы такого размера являются доступный. Я только упомянул, что, поскольку у вас был кроссплатформенный тег - реализация, которая не имеет типа правильной разрядности, не должна предоставлять эти типы.

Обычно вы можете выбрать (с настройкой, определяемой, например, cc -D_INT16_IS_INT и #ifdef s) правильный тип для использования для определенного размера бит. Вы можете определить необходимые определения для каждой платформы, которую хотите поддерживать с помощью кода C, используя CHAR_BIT и sizeof () .

Соответствующий раздел проекта c1x (n1362) - :


7.18.1. 1 Целочисленные типы точной ширины

  1. Имя typedef intN_t обозначает целочисленный тип со знаком шириной N , без битов заполнения и представление с дополнением до двух. Таким образом, int8_t обозначает целочисленный тип со знаком шириной ровно 8 бит.

  2. Имя typedef uintN_t обозначает беззнаковый целочисленный тип шириной N . Таким образом, uint24_t обозначает беззнаковый целочисленный тип с шириной ровно 24 бита.

  3. Эти типы являются необязательными. Однако, если реализация предоставляет целочисленные типы с шириной 8, 16, 32 или 64 бита, без битов заполнения и (для подписанных типов), которые имеют представление с дополнением до двух, она должна определить соответствующие имена typedef.


Что касается выбора типов, должно хватить примерно такого:

#ifdef INT32_IS_SHORT
    typedef short INT32
#endif
#ifdef INT32_IS_INT
    typedef int INT32
#endif
#ifdef INT32_IS_LONG
    typedef long INT32
#endif
5
ответ дан 3 December 2019 в 13:56
поделиться

Я сомневаюсь, что это легко возможно, если не проверить каждую платформу с помощью #ifdef или около того. Но многие библиотеки уже делают эту задачу за вас. Для MSVC это __ int8 , __ int16 и т. Д. В библиотеке GTK есть похожие определения типов.

2
ответ дан 3 December 2019 в 13:56
поделиться

Возможно, вы захотите взглянуть на pstdint.h . Это переносимая реализация stdint.h, не требующая поддержки компилятора C99.

2
ответ дан 3 December 2019 в 13:56
поделиться

Вы всегда можете написать арифметическую библиотеку, которая использует векторы беззнаковых символов для чисел. Таким образом вы можете использовать числа любой длины в битах, и даже позволяют изменять длину в битах.

На самом деле вам не нужно реализовывать такую ​​библиотеку, потому что GNU MP уже обрабатывает это.

http://gmplib.org/

0
ответ дан 3 December 2019 в 13:56
поделиться

Насколько я знаю, ответ отрицательный. Мы кодируем для разных платформ, и мы просто используем typedef для конкретных платформ, используя # if / # else. Например, в Win32: typedef int int32;

2
ответ дан 3 December 2019 в 13:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: