http://www.awuit.com/c-language-the-usage-of-long-long/
在分析BT代码的过程中,遇到了这样的定义:long long line_position;很是纳闷,在C语言中我还没有见过这样的写法,网上搜了,资料也很少,最后在C语言标准与实现这本书中找到了关于long long的说法。在C语言的C99标准扩展了新的整数类型 long long,long是32位宽,占4个字节,long long通常被定义成 64 位宽,也就可以实现了在32位机器上可以扩展8字节的数据,GUN C也支持,当然在64位平台上就存在这个问题了。C99标准并没有硬性规定具体到某种平台上的某种整数类型究竟占用多少字节、能够表示多大范围的数值等, 只是给出一条原则和一个参考数值集合,只要同时满足这两方面条件就算是符合 C 标准。
意思是说: 编译long long需要支持C99标准的编译器才行,VC并不支持,但有对应的类型__int64
|
#ifdef _WIN32 typedef unsigned int uint32_t; int main(int argc, char *argv[]) uint8_t t[64] = printf( p = t; printf("t321[%X].%d t322[%X].%d t323[%X].%d\n" p = t; #ifdef _WIN32 t641 = 0x1122334455667788; #ifdef _WIN32 return 0; |
/*
Test Env:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Microsoft Windows 2000 [Version 5.00.2195]
Result:
sizeof(uint64_t) = 8
sizeof(uint32_t) = 4
t321[7C4E].31822 t322[7C4E].31822 t323[4].4
t641[7C4E].31822 t642[7C4E].31822 t643[4].4
1122334455667788 1234605616436508552
--------------------------------------
Test Env:
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-47.3)
Result:
sizeof(uint64_t) = 8
sizeof(uint32_t) = 4
t321[7C4E].31822 t322[7C4E].31822 t323[4].4
t641[7C4E].31822 t642[7C4E].31822 t643[4].4
1122334455667788 1234605616436508552
*/
在 进行移植的时候可能用的上的:
#ifdef _WIN32
# define APR_UINT64_T_HEX_FMT "llx"
#else
# define APR_UINT64_T_HEX_FMT "I64x"
#endif
example:
sprintf(buf, "%" APR_UINT64_T_HEX_FMT, var);
#define HOST_WIDEST_INT_PRINT_DEC "%I64d"
#define HOST_WIDEST_INT_PRINT_UNSIGNED "%I64u"
#define HOST_WIDEST_INT_PRINT_HEX "0x%I64x"