У меня есть файл
main.cpp, включающий лишь
BaseSample.h,
BaseSample.h выглядит так:
#pragma once
#ifdef STB_IMAGE_IMPLEMENTATION
#error "DEFINED INSIDE BASE"
#endif
#include "Helpers/VulkanTexture.h"
#ifdef STB_IMAGE_IMPLEMENTATION
#error "DEFINED AFTER TEXTURE"
#endif
#include "Helpers/VulkanglTFModel.h"
VulkanTexture.h
#pragma once
... // some includes
#ifdef STB_IMAGE_IMPLEMENTATION
#error "DEFINED INSIDE TEXTURE"
#endif
VulkanglTFModel.h
#pragma once
#include "VulkanTexture.h"
#ifdef STB_IMAGE_IMPLEMENTATION
#undef TINYGLTF_NO_STB_IMAGE
#error "DEFINED INSIDE MODEL"
#endif
И по итогу такой конструкции я получаю ошибку
DEFINED INSIDE MODEL.
Получается, магическим образом, самопроизвольно, между включениями
VulkanTexture.h и
VulkanglTFModel.h был объявлен
define.
Он точно не объявляется внутри
VulkanTexture.h, но в самом начале
VulkanglTFModel.h, он каким-то образом оказывается объявлен.
Почему это происходит?
Разве препроцессор не последователен и может включать файлы в том порядке, в каком ему заблагорассудится, а не как я написал?