gpt4 book ai didi

c - 让 gcc 内联并导出一个函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:09 24 4
gpt4 key购买 nike

鉴于性能原因需要内联的函数(因为它是在循环中调用的,我不希望调用开销)。简化示例:

void increment(int *single_value) {
*single_value++;
}

void increment_values(int *array, size_t length) {
for(size_t i=0;i<length;i++) {
increment(&A[i]);
}
}

但是我想对函数进行单元测试,例如

void test_increment() {
int value = 5;
increment(&value);
assert_equal(value, 6);
}

是否可以告诉编译器内联函数以导出它,以便我可以链接到我的测试?我正在使用 gcc,但适用于所有编译器的方法(clangicc 等)将是首选。

最佳答案

使用 inline 只是暗示编译器可能会随意内联:

"[ . . . ] An inline definition does not provide an external definition for the function, and does not forbid an external definition in another translation unit. An inline definition provides an alternative to an external definition, which a translator may use to implement any call to the function in the same translation unit. It is unspecified whether a call to the function uses the inline definition or the external definition."

— ISO 9899:1999(E),C99 标准,第 6.7.4 节

事实上,许多编译器在使用优化标志调用时自动对看起来像您的示例的函数执行此操作。此外,编译器通常比您更了解它正在生成什么样的指令代码,因此不一定要告诉它内联。

在你的情况下,我会让编译器决定,根本不使用内联。但是,如果您选择使用 inline,您仍然可以在单元测试中使用该功能,所以完全没有问题。

关于c - 让 gcc 内联并导出一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174892/

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