Каков рекомендуемый подход к typedefs для стандартных типов в C?
Например, в начале моего проекта я создал typedef, чтобы использовать наименьшие типы, возможные для их цели. Основное намерение состояло в том, чтобы позволить легко модифицировать типы в случае, когда используемые числовые диапазоны стали слишком большими для типа без необходимости выполнять глобальный поиск + замена по всему проекту. Но через шесть месяцев я не удовлетворен и думаю, что должен быть лучший путь.
Это типы, которые я определил:
/* 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
s и использовать стандартные типы, определенные в stdint.h
, вместо этого по всему моему коду (размеры теперь довольно хорошо стабилизировались)?