首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Notation __no_init __root C

Notation __no_init __root C
EN

Stack Overflow用户
提问于 2011-12-21 01:24:44
回答 2查看 12.1K关注 0票数 10

大家好,我正在读一个C源代码,我发现了一个这样的符号:

代码语言:javascript
复制
__no_init __root extern volatile unsigned char var[10]    @ 0x4000000;

但是我不知道__no_init __root是什么意思,它是标准C语言吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-21 01:43:53

这些是一些针对嵌入式系统的编译器(例如IAR的AVR compiler)中使用的C语言扩展。

__no_init意味着编译器不应该初始化变量,当变量被放在硬件寄存器位置,并且您不希望程序启动时将寄存器设置为0时,将使用该变量。

__root用于告诉编译器/链接器,变量或函数应该保留在二进制映像中,即使它实际上并不在程序中使用。这可能有助于调试目的,并在开发过程中调整程序的大小。

票数 19
EN

Stack Overflow用户

发布于 2011-12-21 01:39:55

这些宏可能是在您的编译器工具链中定义的。根据我的经验,__no_init通常意味着告诉链接器此变量的内存不应由crt0启动代码初始化,该启动代码通常在调用main之前将零写入全局变量。__root通常意味着链接器不应该丢弃变量,即使它认为没有代码正在使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8579403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档