常见的代码规范及逻辑
2016-04-02 18:49
281 查看
记录工作遇到的简单的代码规范
宏定义可以帮助我们防止出错,提高代码的可移植性和可读性
只是简单的字符串替换,在预编译的过程中进行替换。
示例一:变量和表达式都必须用括号括起来
示例二:使用宏传参数类型
宏函数常用的定义方式
在想要获取一个变量的后几位数据的时候可以使用按位与的方式得到
如:获取一个int变量后八位数据
打印时使用编译器自带的宏,来定位bug位置
FILE :宏在预编译时会替换成当前的源文件名
LINE:宏在预编译时会替换成当前的行号
FUNCTION:宏在预编译时会替换成当前的函数名称
VA_ARGS:总体来说就是将左边宏中 … 的内容原样抄写在右边 VA_ARGS 所在的位置。它是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。要注意的是,printf 的输出格式是括号内左边是字符串,右边是变量,而且右变量与左输出格式是一一对应的。所以在上面那个例子中, VA_ARGS只能是一些不含任何变量的字符串常量。因为上面的例子中若VA_ARGS含有变量,整个printf的输出与变量便不能一一对应,输出会出错。
如果仅仅是替换函数名,可用如下方式,此时对VA_ARGS无任何特殊要求:#define myprintf(…) printk(VA_ARGS),在调试程序时可以这样用:
示例一:
示例二:
输出结果:
宏
宏定义
宏定义可以帮助我们防止出错,提高代码的可移植性和可读性只是简单的字符串替换,在预编译的过程中进行替换。
宏的使用
示例一:变量和表达式都必须用括号括起来1 | #define MAX( a, b) ( (a) > (b) (a) : (b) ) |
12 | #define MALLOC(n, type) \ ((type *)malloc((n)* sizeof(type))) |
宏函数
宏函数常用的定义方式12 | #define MACRO(arg1, arg2) do { \ \ do something; \ \ }while(0) |
获取变量的指定位长度数据
在想要获取一个变量的后几位数据的时候可以使用按位与的方式得到如:获取一个int变量后八位数据
12 | int value; value = value & 0xff; |
调试
打印输出调试信息
打印时使用编译器自带的宏,来定位bug位置FILE :宏在预编译时会替换成当前的源文件名
LINE:宏在预编译时会替换成当前的行号
FUNCTION:宏在预编译时会替换成当前的函数名称
VA_ARGS:总体来说就是将左边宏中 … 的内容原样抄写在右边 VA_ARGS 所在的位置。它是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。要注意的是,printf 的输出格式是括号内左边是字符串,右边是变量,而且右变量与左输出格式是一一对应的。所以在上面那个例子中, VA_ARGS只能是一些不含任何变量的字符串常量。因为上面的例子中若VA_ARGS含有变量,整个printf的输出与变量便不能一一对应,输出会出错。
如果仅仅是替换函数名,可用如下方式,此时对VA_ARGS无任何特殊要求:#define myprintf(…) printk(VA_ARGS),在调试程序时可以这样用:
12 | #ifndef LOG_NDEBUG_FUNCTION #define LOGFUNC(...) ((void)0) #else #define LOGFUNC(...) (printk(__VA_ARGS__)) #endif |
使用
示例一:1 | printk("%s%d\n", __FILE__, __LINE__); |
12 | #define myprintf(...) printk("[lch]:File:%s, Line:%d, Function:%s," \ __VA_ARGS__, __FILE__, __LINE__ ,__FUNCTION__); |
测试
12 | #include <stdio.h> #define myprintf(...) printf("[lch]:File:%s, Line:%d, Function:%s," \ __VA_ARGS__, __FILE__, __LINE__ ,__FUNCTION__); int main(int argc, char* argv) { myprintf("swq\n"); printf("hello word!!\n"); } |
wqshao@wqshao:~$ ./a.out [lch]:File:test.c, Line:8, Function:main,swq hello word!!
相关文章推荐
- 解析C#编程的通用结构和程序书写格式规范
- JavaScript模块规范之AMD规范和CMD规范
- C语言的语法风格与代码书写规范指南
- HTTP API响应数据规范整理
- 一些HTML代码的编写风格建议小结
- 网络命令行的使用和范例
- GBT19668.4-2007 计算机网络系统工程监理规范
- GBT19668.3-2007 电子设备机房系统工程监理规范
- GB50174-2008 电子信息系统机房设计规范
- 弱电施工流程及规范(一)
- 弱电施工流程及规范(二)
- 弱电施工流程及规范(三)
- 客户服务心得
- 网易邮箱前端Javascript编码规范:基础规范
- oc中代码规范(一)
- oc中代码规范(二)
- Material Design 开源图标
- CommonJS Modules/1.0 规范
- 数据库命名规范