gpt4 book ai didi

c - C 中的运行时函数解析?

转载 作者:行者123 更新时间:2023-11-30 21:39:12 25 4
gpt4 key购买 nike

假设这是一个 C 代码:

int (*p)();
scanf("%d",&a);
if(a){
p = function1;
}else{
p=function2;
}
int b=(*p)();

这里,函数解析取决于a的值,那么这是否可以被视为运行时函数解析?或者编译器会简单地将 function1function2 内联吗?我们可以肯定地说,C 中的所有函数调用都在编译时解析吗?

最佳答案

int (*function_pointer)(void); /* Define a pointer variable. */
scanf("%d", &user_input);
if (user_input != 0) {
function_pointer = &function1; /* Set the value of that variable
depending on some user input. */
} else {
function_pointer = &function2;
}
int result = function_pointer(); /* Use the value by calling the
function. */

Here, the function resolution is dependent on the value [..]

没有。有两个函数:function1function2。两者都像链接期间使用的其他函数(可能)一样被解析(下面有更多详细信息)。它实际上的作用是确定调用函数时控制流需要传输到的地址

只有哪个函数*实际被调用*取决于用户输入。与此代码片段非常相似:

scanf("%d", &user_input);
int result;
if (user_input != 0) {
result = function1();
} else {
result = function2();
}

由于上面的代码片段与原始代码具有相同的可观察行为,因此编译器实际上可以通过这种方式实现它。如果 function1 和/或 function2 与内联优化器的指标匹配,那么,是的,两个函数都可以内联。

Can we say for sure that All function calls are resolved at compiler time in C?

否,因为对函数(或变量)的某些引用将在链接时(其他翻译单元、静态库)期间解析,某些在加载时(共享库)期间以及某些在运行时(dlopen)期间解析>).

关于c - C 中的运行时函数解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235128/

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