ANSI C的可移植typedef

时间:2014-02-11 13:57:54

标签: c portability

我在项目的标题中有一个可移植的类型定义,我的目标是在多个平台上编译。我正在使用以下typedef:

#ifndef PLATFORM_H
#define PLATFORM_H

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

#ifndef TRUE
#define TRUE (1)
#endif

#ifndef FALSE
#define FALSE (0)
#endif

typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed int int16_t;
typedef unsigned int uint16_t;
typedef signed long int int32_t;
typedef unsigned long int uint32_t;
typedef signed long long int int64_t;
typedef unsigned long long int uint64_t;

#endif

此标头是特定于平台的,因此我对每个平台都有类似的声明,确保整数始终相同。但是,在编译时,我得到了这个:

conflicting types for ‘int32_t’
In file included from /usr/include/stdlib.h:314:0,
                 from platform.h:5,
                 from main.c:1:
/usr/include/x86_64-linux-gnu/sys/types.h:196:1: note: previous declaration of ‘int32_t’ was here

等错误。可能是什么原因?我可以覆盖typedef,还是先检查它的存在?

1 个答案:

答案 0 :(得分:4)

您收到错误是因为您为typedef选择的名称与<stdint.h>标题中的类型名称相冲突。

由于您正在寻找已在stdint.h中定义的类型,因此您可以将其包含在提供此标头的平台上。