C语言中 怎样define 长整形

来源:百度知道 编辑:UC知道 时间:2024/05/21 02:23:37
通常使用格式为 #define XXX (0x1234567890L)

但能不能不写立即数(0x1234567890)而改成算式啊?

比如:

#define AAA 1024
#define BBB 1024
#define CCC AAA*BBB <-- 这里该如何定义才能让其成为32位的数,
如果不加任何定义,编译器只识别为16位的
因为要实现如下形式的代码


#define AAA 1024
#define BBB 1024
#define DDD 100
#define EEE 200
#define FFF (AAA * BBB)

#define CC1 FFF /(DDD + EEE)
#define CC2 FFF / DDD

const unsigned long u64_sz[] = {CCC, DDD};

如果不加 ‘UL’ 之类声明,编译器会把 (AAA * BBB)看成一16位的数,而如果改为如下形式
#define FFF (AAA * BBB)UL
则编译的时候会在 const unsigned long u64_sz[] = {CCC, DDD}; 报错。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

搞定!!如下即可
#define AAA 1024UL
#define BBB 1024UL
#dfine CCC AAA * BBB * 1UL

回看问题补充:这也没有办法呀,你可以试图换一个编译器,不要用TC,32位的编译器一般都可以满足你的要求。我只会C++,不知道C,您所说的(1024 * 1024) & 0xffff我也不是特别清楚。所以我只知道的是,C++之所以不让我们用#define可能就是这个缘故吧,呵呵,在C++中实现您的代码就可谓是轻而易举:
const int AAA = 1024;
const int BBB = 1024;
const int DDD = 100;
const int EEE = 200;
const int FFF = AAA*BBB;
const int CCC = FFF / (DDD+EEE);
const int i_32_sz[] = {CCC, DDD};