zoukankan      html  css  js  c++  java
  • 内联函数与宏定义的区别

    内联函数与宏的区别:

    •  内联函数与普通函数相比,可以加快程序的运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。而宏只是简单的字符替换。
    • 内联函数要做参数类型检查,这是内联函数跟宏相比的优势。
     inline一般只用于如下情况:
        (1)一个函数不断被重复调用
        (2)函数只有简单的几行,且不包含for、while、switch等语句。
        一般而言,写小程序没有必要使用inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,应考虑使用inline
     
    常用的一些宏定义

    1 防止一个头文件被重复包含 
    #ifndef BODYDEF_H 
    #define BODYDEF_H 
    #endif
     
    2 得到指定地址上的一个字节或字
     
    1. #define MEM_B( x ) ( *( (byte *) (x) ) ) 
    2. #define MEM_W( x ) ( *( (word *) (x) ) )
    用法如下:
    #include <iostream>
    #include <windows.h>
    #define MEM_B(x) (*((byte*)(x)))
    #define MEM_W(x) (*((WORD*)(x)))
    int main()
    {
        int bTest = 0x123456;
        byte m = MEM_B((&bTest));/*m=0x56*/
        int n = MEM_W((&bTest));/*n=0x3456*/
        return 0;
    }

    3 得到一个field在结构体(struct)中的偏移量
     
    #define OFFSETOF( type, field ) ( (size_t) &(( type *) 0)-> field )

    4 得到一个结构体中field所占用的字节数 
    #define FSIZ( type, field ) sizeof( ((type *) 0)->field )

    5 得到一个变量的地址(word宽度) 
    #define B_PTR( var ) ( (byte *) (void *) &(var) ) 
    #define W_PTR( var ) ( (word *) (void *) &(var) )
    6 将一个字母转换为大写
    #define UPCASE( c ) ( ((c) >= ''a'' && (c) <= ''z'') ? ((c) - 0x20) : (c) )
    7 判断字符是不是10进值的数字

    #define UPCASE( c ) ( ((c) >= ''a'' && (c) <= ''z'') ? ((c) - 0x20) : (c) )
    8 判断字符是不是16进值的数字 
    #define HEXCHK( c ) ( ((c) >= ''0'' && (c) <= ''9'') ||((c) >= ''A'' && (c) <= ''F'') ||((c) >= ''a'' && (c) <= ''f'') )
    9 防止溢出的一个方法
     
    #define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val))
    10 返回数组元素的个数 
    1. #define ARR_SIZE( a ) ( sizeof( (a) ) / sizeof( (a[0]) ) )
  • 相关阅读:
    异常响应配置
    用户模块自定义
    数据库配置
    虚拟环境搭建
    SDK Manager failed to install 'java.exe' locking directory
    AndroidUI自动化测试工具-UIautomator
    Android自动化压力测试快速入门教程(图解)——MonkeyRunner
    adb 常用命令
    Android压力测试快速入门教程(图解)——Monkey工具
    测试用例的优先级别划分
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4633885.html
Copyright © 2011-2022 走看看