c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?

标签 c++ c initialization arduino avr-gcc

为了确保一些初始化代码在 main 之前运行(使用 Arduino/avr-gcc),我有如下代码:

class Init {
public:
    Init() { initialize(); }
};

Init init;

理想情况下,我希望能够简单地编写:

initialize();

但这不能编译...

有没有更简洁的方法来达到同样的效果?

注意:代码是 Arduino 草图的一部分,因此 main 函数是自动生成的,不能修改(例如调用 initialize 在任何其他代码之前)。

更新:理想情况下,初始化将在 setup 函数中执行,但在这种情况下,还有其他代码依赖于它发生在 main.

最佳答案

您可以使用 GCC 的 constructor attribute确保它在 main() 之前被调用:

void Init(void) __attribute__((constructor));
void Init(void) { /* code */ }  // This will always run before main()

关于c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/949890/

相关文章:

c++ - 从 cpp 文件内联函数时出现链接器错误

c - 是否可以获取指针指向的项目的大小?

c - fscanf 不会工作两次?

c++ - 通过使用(某种程度上)全局变量与静态函数变量来初始化值?

matlab - Matlab ode45基本设置

c++ - 静态类成员的定义内初始化的最佳替代方案? (针对 SVN 关键字)

c++ - 基于 sizeof c++ 的条件语句的问题

c++ - 静态链接系统库、libc、pthreads,以帮助调试

C++ - 无法修改类成员函数中的指针

使用带 -fPIC 的 dlopen 和 dlsym 编译 C 程序