對於C中標準類型的typedefs,推薦使用什麼方法?在C中爲標準類型提供typedefs的推薦方法?
例如,在我的項目開始時,我創建了typedefs,以便爲其目的使用最小的類型。主要目的是在不需要在整個項目中進行全局搜索+替換的情況下,對所使用的數值範圍變得太大而無法輕鬆修改類型。但六個月後,我並不滿意,認爲必須有更好的方法。
這些是我所定義的類型:
/* 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
中定義的標準類型代替整個代碼(現在尺寸現在穩定得相當好)?
查看http://groups.google.com/group/comp.compilers/msg/c0797b5b668605b4?pli=1 – adatapost 2009-10-25 11:25:26
當你說「自發現此行爲實際上未定義」時,你指的是什麼? ? – caf 2009-10-25 21:05:10
@caf:儘管將-1分配給無符號存儲類型的結果通常會導致該類型的最大值,但此行爲不是由C標準定義的,因此無法保證。 – 2009-10-25 21:27:48