gpt4 book ai didi

c++ - 外部内联函数 gcc

转载 作者:太空狗 更新时间:2023-10-29 23:17:40 25 4
gpt4 key购买 nike

我正在阅读有关 C/C++ 中的内联函数的信息:

http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7a.doc%2Flanguage%2Fref%2Fclrc07cplr243.htm

对于下面的代码:

inline.h:
#include<stdio.h>

extern inline void two(void){ // GNU C uses this definition only for inlining
printf("From inline.h\n");
}

main.c:
#include "inline.h"

int main(void){
void (*pTwo)() = two;
two();
(*pTwo)();
}

two.c:
#include<stdio.h>

void two(){
printf("In two.c\n");
}

输出为:

   From inline.h
In two.c

它表示此输出是为“使用内联关键字的 gcc 语义”获得的。

如果其中一个版本被内联,如何决定要调用的 two() 函数的版本?

正如我从输出中看到的那样,内联版本是使用 two() 直接调用的,即没有任何函数指针。然而,当使用函数指针时,将调用非内联版本。是否有解决此类调用的一般规则?

最佳答案

当使用函数指针时,可调用对象必须有一个地址。然后编译器必须为该函数提供一个地址,因此它将解析为非内联地址。

我想一般规则是您不能使用函数指针调用内联函数,因此如果存在 2 个版本的函数,则在使用函数指针时将调用非内联函数。请注意,inline 只是编译器的一个提示,它可能会选择忽略它。因此,我不认为(如果我错了请纠正我)您可以做任何事情来确保调用函数的内联版本。

当然,让两个函数同名可能不是一个好主意。

编辑:启用优化标志可能会改变一些事情。即使使用函数指针也可以调用内联版本。

关于c++ - 外部内联函数 gcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com