扫码阅读
手机扫码阅读

【进阶】GCC对C语言扩展语法归纳详解(二)

131 2024-08-31

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:【进阶】GCC对C语言扩展语法归纳详解(二)
文章来源:
一起学嵌入式
扫码关注公众号

本文介绍了GCC编译器对C语言标准的一些扩展语法,并逐一进行了讲解。这些扩展包括case范围扩展、零长度数组、指针与零长度数组的区别以及__attribute__关键字的使用。

Case范围扩展
GCC允许在switch-case语句中使用...表示范围,简化了代码,但需要注意...两端数据范围之间要有空格。

零长度数组
零长度数组是长度为0的数组,它不占用内存空间,通常作为变长结构体的成员使用,以访问分配的内存。

指针与零长度数组的区别
指针与数组名在函数参数传递时有所不同,数组名仅表示内存地址,而指针是一个变量。零长度数组使用起来更为方便,没有指针的存储冗余。

__attribute__关键字
通过__attribute__关键字可以声明函数、变量或类型的特殊属性,如数据对齐方式。它的使用方法是在声明时加上__attribute__((ATTRIBUTE)),ATTRIBUTE为要声明的属性。

文章还讨论了属性声明section和aligned,分别用于将函数或变量放于指定的段(section)以及指定变量的对齐方式。此外,对于结构体对齐,GCC允许通过属性显式指定成员变量的地址对齐方式,以及整个结构体的对齐方式。

属性packed
packed属性用于减少地址对齐,可以用于单个成员变量或整个结构体,使其使用尽可能小的地址对齐方式。

文章最后鼓励读者关注和分享,以便加入更多的嵌入式学习和交流。

想要了解更多内容?

查看原文:【进阶】GCC对C语言扩展语法归纳详解(二)
文章来源:
一起学嵌入式
扫码关注公众号