Портативные определения типов для ANSI C

У меня есть переносимое определение типов в заголовке проекта, которое я собираюсь компилировать на нескольких платформах. Я использую следующие typedefs:

#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 ответ

Решение

Вы получаете ошибку, потому что вы выбрали имена для вашего typedef s, которые сталкиваются с именами типов из <stdint.h> заголовок.

Так как вы ищете типы, которые уже определены в stdint.h Вы можете также включить его на платформах, которые предоставляют этот заголовок.

Другие вопросы по тегам