Портативные определения типов для 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
Вы можете также включить его на платформах, которые предоставляют этот заголовок.