标签:div 内联 gen var static track size code pre
第一个版本号:
//return true in big-endian machines bool check_big_endian1() { int a = 0; int *p = &a; *(char *)p = 1; return a != 1; }
採用union的第二个版本号:
//return true in big-endian machines bool check_big_endian2() { union{ int a; char b; }var;//sizeof(var)=4 var.a = 1; return var.b != 1; }
最后看一个避免函数调用的版本号:
static union { int a; char b; }_s_var_endian_check = {1}; #define ISLITTLEENDIAN (_s_var_endian_check.b == 1) #define ISBIGENDIAN !ISLITTLEENDIAN
这样就能够通过宏ISLITTLEENDIAN和ISBIGENDIAN读取静态变量的值来推断是否是小端模式或者大端模式了。
只是这是C的写法。C++里面能够採用内联(inline)函数来避开对宏的使用。
推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
标签:div 内联 gen var static track size code pre
原文地址:http://www.cnblogs.com/yxysuanfa/p/7049932.html