gpt4 book ai didi

c - If 语句与函数指针

转载 作者:太空狗 更新时间:2023-10-29 16:51:40 24 4
gpt4 key购买 nike

目标是根据复选框是打开还是关闭来更改事件循环中的行为。我能想到的最简单的方法就是在每次循环运行时测试复选框状态。

// if-statement

void action() { /* ... */ }


void someLoop() {

if (checkboxTrue) {
action();
}
// ... other stuff

}

如果使用函数指针,代码是否会更高效、更简洁或在其他方面更好?像这样:

// function pointer

void action() { /* ... */ }
void empty() {}
void (*actionPtr)();


void checkboxChanged(int val) {

if (val == 1)
actionPtr = &realAction;
else
actionPtr = ∅

}

void someLoop() {

(*actionPtr)();
// ... other stuff

}

最佳答案

  1. 一个间接函数调用比一个 if 条件调用更昂贵。

  2. 几个 if 条件比间接函数调用更昂贵。

  3. 此时担心速度是没有意义的:
    您正在等待用户的延迟,并且您正在处理他可以查看的内容(即不会有大量的复选框)。在这样的详细级别上优化每秒执行不到一百万次的代码绝对没有意义。

因此,我的建议是:在编写用户界面时,不要再担心 if 或函数调用的成本。只考虑耗时算法中的此类内容。

但是,如果您发现您确实在内部循环中使用了复杂的 if/else 阶梯和/或 switch 语句,那么您可以通过用间接函数调用替换它们来优化。


编辑:
你说你每秒有 600 次检查。假设您只有一个 if 情况要处理(if 更快的情况),您通过不使用函数指针间接寻址可以每秒“节省”大约 6 微秒,即运行时间的 0.0006%。绝对不值得付出努力...

关于c - If 语句与函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906060/

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