zoukankan      html  css  js  c++  java
  • 第6课.内联函数分析

    ===
    正常函数的使用涉及(压栈,跳转,返回)等等,内联函数则没有这些问题,它是直接去扩展。
    c++中推荐使用内联函数替代宏代码片段;(内联函数对代码块的替换不是宏代码块那种简单的文本替换,不是由预处理器完成的。而是由编译器,将编译生成的代码拿来扩展。因为是由编译器编译的,所以可以进行参数类型检查之类一系列的工作)
    c++中使用inline关键字声明内联函数

        inline int func(int a, int b)
        { 
            return a < b ? a : b; 
        }
    

    注:内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。inline向编译器申请内联函数,编译器可以拒绝,被拒绝后就变成了普通函数,此时函数的(压栈,跳转,返回)就逃脱不了。

    #include <stdio.h>
    
    #define FUNC(a, b) ((a) < (b) ? (a) : (b))
    
    inline int func(int a, int b)
    {
    	return a < b ? a : b;
    }
    
    int main(int argc, char *argv[])
    {
    	int a = 1;
    	int b = 3;
    	int c = FUNC(++a, b);        //int c = ((++a) < (b) ? (++a) : (b))
                //int c = func(++a, b);
    	
    	printf("a = %d
    ", a);        //3        2
    	printf("b = %d
    ", b);        //3        3
    	printf("c = %d
    ", c);        //3        2
    	
    	return 0;
    }
    

    这个程序就能说明简单文本替换的问题
    2.

    a.现代c++编译器能够进行编译优化,一些函数即使没有inline声明,也可以被内联编译
    b.一些现代c++编译器提供了扩展语法,能够对函数进行强制内联,如:
    g++: attribute((always_inline))
    MSVC: __forceinline

        //__forceinline
        //__attribute__((always_inline))        //三个选一个使用
        //inline 
        int add_inline(int n);
    

  • 相关阅读:
    利用URL protocol在网页打开本地exe
    [Leetcode]50. Pow(x, n)
    【转载】初识google test
    MySQL主从配置【转载】
    MySQL源码安装(centos)
    MySQL数据库MyISAM和InnoDB存储引擎的比较【转载】
    MySQL 事务
    MySQL 对于千万级的大表要怎么优化
    MySQL性能优化的最佳21条经验【转载】
    mysql日志详细解析【转载】
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/11777350.html
Copyright © 2011-2022 走看看