The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
guonaihong

goalng 如何控制函数成为 内联函数?

  •  
  •   guonaihong ·
    guonaihong · Dec 1, 2020 · 2185 views
    This topic created in 2015 days ago, the information mentioned may be changed or developed.

    在 c 里面可以通过宏替换,把一段逻辑,插入到代码里面,可以省去对函数调用的运行影响。简单来说内联会快点。

    有童鞋在 go 做过相关研究吗?

    Supplement 1  ·  Dec 2, 2020

    上面内联概念用的大的范围,细想不妥。内联和宏替换是有区别的,虽然一般场景差不多去除函数调用,比如 通常会实现max宏

    #define max(a, b) (a) > (b) ? (a):(b)
    

    指定内联关键字

    int __inline__  max(int a,  int b) {
        return a > b ?a :b;
    }
    

    如果重新提问。直接问go里面有类似宏替换的黑科技,或者指定内联关键字。

    8 replies    2020-12-02 16:57:53 +08:00
    QingXuJiaZhi
        1
    QingXuJiaZhi  
       Dec 1, 2020
    Go 想这样做也很容易,官方工具链就提供 generate, 但绝大多情况下都不需要优化到这个程度,或者说有这种需求的项目通常会选择 C/Rust
    guonaihong
        2
    guonaihong  
    OP
       Dec 1, 2020
    @cmdOptionKana 有相关文档吗?我看下。还是在 golang wiki 里面找?
    guonaihong
        4
    guonaihong  
    OP
       Dec 1, 2020
    @whitehack 感谢。。。
    0x11901
        5
    0x11901  
       Dec 1, 2020
    其实 u1s1,你在 c 里面也就是暗示编译器你想内联,实际内不内联还是编译器说了算的。就算你写的时候根本不知道啥叫内联函数,编译器没准也给你内联了。

    所以我觉得你压根没必要纠结这事,相信 go 的编译器吧
    ly841000
        6
    ly841000  
       Dec 1, 2020
    @0x11901 c 里面几大编译器都能强制内联
    0x11901
        7
    0x11901  
       Dec 2, 2020
    @ly841000 讲道理你一个函数里面写循环写递归再“强制”内联,编译器肯定是会拒绝的……然后我仔细看了一眼楼主的问题,这好像说的不是内联函数吧?宏替换???
    guonaihong
        8
    guonaihong  
    OP
       Dec 2, 2020
    @0x11901 我举的例子不太好,直接关注内联就行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2997 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:36 · PVG 22:36 · LAX 07:36 · JFK 10:36
    ♥ Do have faith in what you're doing.