我试图想出一种可以防止内联函数的便携方式。我在old answer找到了我的解决方案,其中有一条评论说“它可能并不总是有效”。
void (*foo_ptr)() = foo;
foo_ptr();
我的功能只是增加一个volatile,目的是控制PC进行验证(运行一些跟踪硬件),而我并不关心周围的代码 - 只是说我的流程可能会继续工作10年后再回到这个时期(使用新的工具链)。我宁愿不使用属性或嵌入式汇编程序(我已经需要支持3个工具链,而且我现在有出现的东西)。
我认为通过易失性传递地址会给我更多保护。这是必要的,还是有什么不那么难看的我可以使用?
答案 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();
}