C 宏引起的类型冲突

标签 c arm gcc-warning

我正在构建一些代码,这些代码用于使用旧版本的 Rowley Crossworks for ARM 版本 2 正确编译。现在尝试使用 Crossworks for ARM 版本 4 编译应用程序,以下头文件会导致编译器抛出以下错误错误:

conflicting types for 'UEZMemAlloc'
conflicting types for 'UEZMemRealloc'

/*-------------------------------------------------------------------------*
 * File:  uEZMemory.h
 *-------------------------------------------------------------------------*
 * Description:
 *     uEZ Memory Allocation (thread safe) routines
 *-------------------------------------------------------------------------*/
#ifndef _UEZ_MEMORY_H_
#define _UEZ_MEMORY_H_

/*--------------------------------------------------------------------------
 * uEZ(R) - Copyright (C) 2007-2010 Future Designs, Inc.
 *--------------------------------------------------------------------------
 * This file is part of the uEZ(R) distribution.  See the included
 * uEZLicense.txt or visit http://www.teamfdi.com/uez for details.
 *
 *    *===============================================================*
 *    |  Future Designs, Inc. can port uEZ(tm) to your own hardware!  |
 *    |             We can get you up and running fast!               |
 *    |      See http://www.teamfdi.com/uez for more details.         |
 *    *===============================================================*
 *
 *-------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------*
 * Includes:
 *-------------------------------------------------------------------------*/
#include "uEZTypes.h"

#ifndef UEZ_MEM_CHECK_MEMORY
#define UEZ_MEM_CHECK_MEMORY    0
#endif
#ifndef UEZ_MEM_CHECK_MEMORY_FAIL_CALLBACK
#define UEZ_MEM_CHECK_MEMORY_FAIL_CALLBACK 0
#endif

/*-------------------------------------------------------------------------*
 * Prototypes:
 *-------------------------------------------------------------------------*/
void UEZMemInit(void);
void *UEZMemAlloc(TUInt32 aSize);
void *UEZStackMemAlloc(TUInt32 aSize);
void UEZMemFree(void *aMemory);
void *UEZMemRealloc(void *aMemory, TUInt32 aSize); //NOT IMPLEMENTED YET
void *UEZMemAllocPermanent(TUInt32 aSize);
void *UEZPlatformMemAllocPermanent(TUInt32 aSize);

#if UEZ_MEM_CHECK_MEMORY_FAIL_CALLBACK
void UEZMemFailedCallback(void);
#endif
#if UEZ_MEM_CHECK_MEMORY
TUInt32 UEZMemGetSize(void *aMemory);
TUInt32 UEZMemGetNumBlocks(void);
#endif

/*-------------------------------------------------------------------------*
 * Macros:
 *-------------------------------------------------------------------------*/
// Provide standard C compatible routines
#define malloc(a)           UEZMemAlloc(a)
#define free(a)             UEZMemFree(a)
#define realloc(a, b)       UEZMemRealloc(a, b)


#endif // _UEZ_MEMORY_H_

/*-------------------------------------------------------------------------*
 * End of File:  uEZMemory.h
 *-------------------------------------------------------------------------*/

在我看来,新的编译器现在对以下内容感到恼火:

#define malloc(a)           UEZMemAlloc(a)
#define realloc(a, b)       UEZMemRealloc(a, b)

我正在使用的 uEZ 库有 documentation here.这似乎表明这是故意的。随着时间的推移,gcc 编译器/预处理器是否变得更加挑剔?有没有办法避免这些错误? Rowley Crossworks for ARM 使用 GCC。

最佳答案

解决方案是修改 Config_Build.h 文件,该文件导致编译不会更改某些标准 C 类型的类型。

关于C 宏引起的类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660846/

相关文章:

C 数组和指针

c - 为什么 -o 与 gcc 会改变输出

linux-kernel - 链接器脚本浪费了我的内存

x86 - 如何应对平台碎片化,设备树是答案吗?

c++ - C中double **和double (*)[2]的区别

c++ - 有条件的大型平面数组遍历和令人惊讶的短循环执行时间

c - 具有多个设备的板上的 Little 和 Big Endian 访问 - 嵌入式软件架构

gcc - MQX 4.0.1 程序未使用 GCC 编译

c - 使用 GTK+2 时收到 “format not a string literal and no format arguments” 警告

c++ - 什么是 gcc Wmaybe-未初始化警告