Каков рекомендуемый подход к определениям типов для стандартных типов в C?
Например, в начале моего проекта я создал определения типов, чтобы использовать наименьшие возможные типы для своих целей. Основное намерение состояло в том, чтобы позволить легко модифицировать типы в случае, когда используемые числовые диапазоны становятся слишком большими для типа, без необходимости выполнять глобальный поиск + замену во всем проекте. Но через шесть месяцев я не удовлетворен и думаю, что должен быть лучший способ.
Вот типы, которые я определил:
/* type to be used for storing map data within
n*n array */
typedef unsigned char map_t;
/* type to be used for storing coordinates in map.
min 0,max 32 (MAP_W,MAP_H defaults). note: no
longer requires signed. */
typedef unsigned char xy_t;
/* type to be used for counters, ie moves_remaining
has max 2000 */
typedef signed int ctr_t;
/* type to be used for storing the level number,
requires signed. */
typedef signed short lvl_t;
/* type to be used for storing contact types,
see actions.h CONTACT */
typedef signed short ct_t;
/* small unsigned type, miscellaneous */
typedef unsigned char su_t;
/* small signed type, miscellaneous */
typedef signed char ss_t;
struct xy
{
xy_t x;
xy_t y;
};
struct scrxy
{
int x;
int y;
};
struct xy_offset
{
ss_t x;
ss_t y;
};
Некоторый код вместо использования знакового типа и проверки n < 0 && n > max_val
использует беззнаковый тип и проверяет только n > max_val
, где max_val
меньше T_MAX
, хотя с тех пор я обнаружил, что это поведение на самом деле не определено.
Должен ли я удалить все эти typedef
и вместо этого использовать стандартные типы, определенные в stdint.h
, во всем моем коде (размеры теперь довольно хорошо стабилизировались)?