优雅的宏定义

打印:

  1. #define DBG_vPrintf(a,b,ARGS...) do { if (a) printf(b, ## ARGS); } while(0)
  2. #define DBG_vAssert(a,b) do { if (a && !(b)) printf(__FILE__ " %d : Asset Failed\n", __LINE__ ); } while(0)
  1. #define UI_BLUE(x) "\e[34;1m"x"\e[0m"
  2. #define UI_GREEN(x) "\e[32;1m"x"\e[0m"
  3. #define UI_YELLOW(x) "\e[33;40;1m"x"\e[0m"
  4. #define UI_RED(x) "\e[31;1m"x"\e[0m"
  5. #define DBG_ERR if (defined_dbg & DBG_ERROR) \
  6. printf(UI_RED("[WIFI-ERR]")" %s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__); \
  7. printf
  8. #define DBG_INFO if (defined_dbg & DBG_INFOR) \
  9. printf(UI_BLUE("[WIFI-INFO]")" %s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__); \
  10. printf
  11. #define DBG_DBG if (defined_dbg & DBG_DUBGER) \
  12. printf(UI_GREEN("[WIFI-DBG]")" %s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__); \
  13. printf
  14. #define DBG_WAN if (defined_dbg & DBG_WANNING) \
  15. printf(UI_YELLOW("[WIFI-DBG]")" %s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__); \
  16. printf

  1. 6.标号元素
  2. 标准 C 要求数组或结构体的初始化值必须以固定的顺序出现,在 GNU C 中,通
  3. 过指定索引或结构体成员名,允许初始化值以任意顺序出现。
  4. 指定数组索引的方法是在初始化值前添加“ [INDEX] =” ,当然也可以用
  5. “[FIRST … LAST] =”的形式指定一个范围。例如下面的代码定义一个数组,并把其
  6. 中的所有元素赋值为 0:
  7. unsigned char data[MAX] = { [0 ... MAX-1] = 0 };
  8. 下面的代码借助结构体成员名初始化结构体:
  9. struct file_operations ext2_file_operations =
  10. {
  11. llseek: generic_file_llseek,
  12. read: generic_file_read,
  13. write: generic_file_write,
  14. ioctl: ext2_ioctl,
  15. mmap: generic_file_mmap,
  16. open: generic_file_open,
  17. release: ext2_release_file,
  18. fsync: ext2_sync_file,
  19. };
  20. 但是,Linux 2.6 推荐类似的代码应该尽量采用标准 C 的方式,如下所示:
  21. struct file_operations ext2_file_operations =
  22. {
  23. .llseek = generic_file_llseek,
  24. .read = generic_file_read,
  25. .write = generic_file_write,
  26. .aio_read = generic_file_aio_read,
  27. .aio_write = generic_file_aio_write,
  28. .ioctl = ext2_ioctl,
  29. .mmap = generic_file_mmap,
  30. .open = generic_file_open,
  31. .release = ext2_release_file,
  32. .fsync = ext2_sync_file,
  33. .readv = generic_file_readv,
  34. .writev = generic_file_writev,
  35. .sendfile = generic_file_sendfile,
  36. };

来自为知笔记(Wiz)

时间: 2024-10-28 20:18:51

优雅的宏定义的相关文章

宏定义的黑魔法 - 宏菜鸟起飞手册

转载:https://onevcat.com/2014/01/black-magic-in-macro/ 宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身

iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册

宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西.即使是能偶尔使

iOS 7:漫谈#define 宏定义(转)

iOS 7:漫谈#define 宏定义 #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加. 如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来

iOS 7:漫谈#define 宏定义

#define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加. 如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务逻辑那样是每天会接触的东西

宏定义中的#,##,...,do{}while(0),__VA_ARGS__

宏定义中的#,## 1.在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组 #define syslog(a) fprintf(stderr,"Warning: " #a"\n"); 2.简单的说,"## "是一种分隔连接方式,它的作用是先分隔,然后进行强制连接 举列 -- 试比较下述几个宏定义的区别 #define A1(name, type)  type name_##type##_type 或 #define A

笔记3:预处理器-(2)宏定义

#define指令称为宏定义指令,通常用#define指令来定义一个宏用来代表其他东西的一个名字(如常量表达式等).通常来说预处理器会通过将宏的名字和它的定义存储在一起来响应#define指令.当这个宏在后面的程序中使用到时,预处理器会"扩展"宏,将宏替换为其定义值. 简单的宏 简单的宏的定义格式: #define 标识符 替换列表 如: #define DTE_LEN 80 #define TRUE 1 #define FALSE 0 #define PI 3.1415926 #de

宏定义中使用do{}while(0)的好处 (转载)

宏定义中使用do{}while(0)的好处   #define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning: #define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现. 3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) /action1(); /action2(); 在以下情况

Android.mk宏定义demo【转】

本文转载自:http://blog.csdn.net/u010164190/article/details/72783963 1.Android.mk  LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := binder_demo_showLOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := test.cpp TARGET_BUILD_VARINT := userdebug #宏

c++编译时打印宏定义

#pragma message("this is message") #pragma message只能打印字符串,如果想打印任何宏定义可使用: #define PRINT_MACRO_HELPER(x) #x #define PRINT_MACRO(x) #x"="PRINT_MACRO_HELPER(x) #pragma message(PRINT_MACRO(var)) 如:#define __cplusplus 199911L #pragma message