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

问题描述 投票:0回答:1

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

c keyword portability
1个回答
0
投票

不。 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__ */
© www.soinside.com 2019 - 2024. All rights reserved.