标签:自己 order min 运行时 操作 argc abs fine typeof
之前写了一个非常mini的log库(也不算库把,自己瞎jb写的),里面几乎都是宏的实现。这里打算趁热打铁,把自己知道的几下子都贴出来,后续如果有新的收获会更新这个博文。
文笔拙劣,主要是给自己做个提醒。
一目了然,不做解释。
#define __ENDIAN() ({ short _a = 0x1234; *((char*)&_a) == 0x12 ? 1 : 0; }) #define big_endian() (__ENDIAN() == 1) #define little_endian() (__ENDIAN() == 0)
当然还有另一种方式去确定字节序。下面是编译时确定字节序的方式。
只要通过引入头文件<endian.h>便可以在编译时通过宏判断字节序了。参考 ‘/usr/include/linux/tcp.h’ 你会发现另一种写法(自己去看下)。
#if __BYTE_ORDER == __LITTLE_ENDIAN // do_sth(); #elif __BYTE_ORDER == __BIG_ENDIAN // do_sth(); #else #error "Unknown byte order" #endif
max与min函数是最常用的。我们可以有很多方式去实现它,宏,inline,函数等。
由于这两个函数都很小,一般不建议
#define max(a, b) ({ typeof(a) _a = a; typeof(b) _b = b; _a >= _b ? _a : _b; })
#include <stdio.h> #define test(__DOC, args) __SDK_##__DOC##_TEST(args) void __SDK_V1_TEST(int a) { fprintf (stdout, "version %d\n", a); return; } void __SDK_V2_TEST(int a) { fprintf (stdout, "version %d\n", a); return; } int main(int argc, char **argv) { test(V1, 1); test(V2, 2); return 0; }
标签:自己 order min 运行时 操作 argc abs fine typeof
原文地址:https://www.cnblogs.com/sinpo828/p/10785636.html