У меня есть файл заголовка ptestlib.h
, содержимое которого приведено ниже:
#ifndef INCLUDED
#define INCLUDED
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef TRUE
#define TRUE (!FALSE)
#endif
/* optimization levels */
#define OLEVEL1 0x01
#define OLEVEL2 0x02
#define OLEVEL3 0x03
#define OLEVEL4 0x04
/* error codes */
#define EBADNUM 0x00
#define ESYSFAIL 0x01
#define EIOFAIL 0x02
typedef uint32_t Bool;
typedef Bool Test(uint32_t);
extern Bool
init(void);
/* primality test with optimization level 1 */
extern Bool
testl1(uint32_t);
/* primality test with optimization level 2 */
extern Bool
testl2(uint32_t);
/* primality test with optimization level 3 */
extern Bool
testl3(uint32_t);
/* primality test with optimization level 4 */
extern Bool
testl4(uint32_t);
extern const char *gerrsym[3];
#endif
В этом заголовке я использую uint32_t
из <stdint.h>
. Я не добавляю #include <stdint.h>
в этот заголовочный файл, потому что я использую #include <stdint.h>
в тех исходных файлах, которые используют ptestlib.h
. То есть каждый исходный файл, который использует ptestlib.h
, начинается с #include <stdint.h>
и #include "ptestlib.h"
. Проблема в том, что uint32_t
называется именем неизвестного типа G CC. Но когда я перемещаю строку #include <stdint.h>
в ptestlib.h
, то все работает нормально. Почему компилятор не видит uint32_t
при включении <stdint.h>
через исходный файл?