我在项目的标题中有一个可移植的类型定义,我的目标是在多个平台上编译。我正在使用以下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,还是先检查它的存在?
答案 0 :(得分:4)
您收到错误是因为您为typedef
选择的名称与<stdint.h>
标题中的类型名称相冲突。
由于您正在寻找已在stdint.h
中定义的类型,因此您可以将其包含在提供此标头的平台上。