__extension__关键字是否可以在所有编译器中移植?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__extension__关键字是否可以在所有编译器中移植?相关的知识,希望对你有一定的参考价值。

__extension__关键字可在所有编译器之间移植吗?我在gcc手册中对此进行了调查,但是如果此关键字是可移植的,则没有提及。如果有人知道,将感谢您的帮助。

答案

不。 C标准未涵盖的任何内容都是不可移植的。这就是为什么我们想要(或必须)使用编译器特定的扩展编译指示或属性时,需要编写这样一个可怕的代码的原因。

#if  defined ( __GNUC__ )
#ifndef __weak
#define __weak   __attribute__((weak))
#endif /* __weak */
#ifndef __packed
#define __packed __attribute__((__packed__))
#endif /* __packed */
#endif /* __GNUC__ */


/* In HS mode and when the DMA is used, all variables and data structures dealing
   with the DMA during the transaction process should be 4-bytes aligned */

#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
#ifndef __ALIGN_END
#define __ALIGN_END    __attribute__ ((aligned (4U)))
#endif /* __ALIGN_END */
#ifndef __ALIGN_BEGIN
#define __ALIGN_BEGIN
#endif /* __ALIGN_BEGIN */
#else
#ifndef __ALIGN_END
#define __ALIGN_END
#endif /* __ALIGN_END */
#ifndef __ALIGN_BEGIN
#if defined   (__CC_ARM)      /* ARM Compiler */
#define __ALIGN_BEGIN    __align(4U)
#elif defined (__ICCARM__)    /* IAR Compiler */
#define __ALIGN_BEGIN
#endif /* __CC_ARM */
#endif /* __ALIGN_BEGIN */
#endif /* __GNUC__ */

以上是关于__extension__关键字是否可以在所有编译器中移植?的主要内容,如果未能解决你的问题,请参考以下文章

Java千百问_03基础语法(014)_volatile关键字有什么用

错误:在 Linux (Centos) 中的“__extension__”之前预期的 unqualified-id

Keil> 编译器特有的功能 > 关键字和运算符 > __weak

如何在 main() 执行之前先运行其它函数

是否可以实现 __super 宏?

__attribute__