1.字符型常量、整数型常量、浮点数常量的赋值;
有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。
//字符型常量
char A = '\xFF'; //合格
char A = 0XFF; //不合格,因为0xff默认为int型
//整数
int i = 100;
unsigned int u;
u = 100; //十进制
u = 0124; //0 作为前缀,八进制
u = 0x80000000U //0X 作为前缀,十六进制
u = (unsigned int)-1; //0xffffffff
u = (unsigned int)-2; //0xfffffffe
long l = 0x80000000L; //后缀:l/L
unsigned long ul = 0x80000000UL; //后缀:U、L,顺序和大小写可随意
//浮点数
float f1 = 0.1F;
double f2 = 0.1; //没有后缀!
long double f3 = 0.1L;
//filename字符串是"/home/user/foo.bar"连起来的,即“A” "B"与“AB”同效。
#define EXT ".bar"
#define NAME "foo"
static const char* filename = "/home/" "user/" NAME EXT;
3.借助编译器来定义常量值
//1.定义XXX_FIRST和XXX_LAST枚举量
//2.定义XXX_MIN、XXX_MAX和XXX_NR宏
/*以后增删枚举量的时候,不需要再去做总数量的统计和更改相关的宏定义值*/
typedef enum purc_variant_type
{
PURC_VARIANT_TYPE_FIRST = 0,
/*critical:keep order as is*/
PURC_VARIANT_TYPE_UNDEFINED = PURC_VARIANT_TYPE_FIRST,
PURC_VARIANT_TYPE_NULL,
PURC....,
......,
PURC_VARIANT_TYPE_SET,
PURC_VARIANT_TYPE_LAST = PURC_VARIANT_TYPE_SET,
}purc_variant_type;
#define PURC_VARIANT_TYPE_MIN PURC_VARIANT_TYPE_FIRST
#define PURC_VARIANT_TYPE_MAX PURC_VARIANT_TYPE_LAST
#define PURC_VARIANT_TYPE_NR (PURC_VARIANT_TYPE_MAX - PURC_VARIANT_TYPE_MIN + 1)
4.混合用标识符和标志位
#define WS_EX_WINTYPE_MASK 0X0000000FL
#define WS_EX_WINTYPE_TOOLTIP 0X00000001L
#define WS_EX_WINTYPE_GLOBAL 0X00000002L
#define WS_EX_WINTYPE_DOCKER 0X00000003L
...
/*window_style可以分不同的段,每段功能按数来区分不用按单独的位*/
switch(window_style & WS_EX_WINTYPE_MASK) {
case WS_EX_WINTYPE_TOOLTIP:
...
break;
}