防止功能内联移植

时间:2017-05-25 11:43:56

标签: c optimization

我试图想出一种可以防止内联函数的便携方式。我在old answer找到了我的解决方案,其中有一条评论说“它可能并不总是有效”。

void (*foo_ptr)() = foo;
foo_ptr();

我的功能只是增加一个volatile,目的是控制PC进行验证(运行一些跟踪硬件),而我并不关心周围的代码 - 只是说我的流程可能会继续工作10年后再回到这个时期(使用新的工具链)。我宁愿不使用属性或嵌入式汇编程序(我已经需要支持3个工具链,而且我现在有出现的东西)。

我认为通过易失性传递地址会给我更多保护。这是必要的,还是有什么不那么难看的我可以使用?

1 个答案:

答案 0 :(得分:3)

最简单的方法是完全避免函数被内联的任何机会'是将函数放在单独的源文件中,并在链接时而不是在编译时将函数放入可执行文件中。

这是一种方式:

header_1.h     #ifndef HEADER_1_H     #define HEADER_1_H

<link rel="stylesheet" href="datepicker.css">

source_1.c

void foo( void );

#endif // HEADER_1_H

source_2.c

...
void foo()
{
    // do something
}

然后使用以下编译/链接语句

#include "header_1.h"

int main( void )
{
    foo();
}