我花了一些时间开发一个只有标题的库,并且偶然发现了一个十字路口。我在网上看到的任何地方,总是使用内联函数。但在 的示例中stb_image.h
,源代码只是写在标题的下半部分,由#ifdef STB_IMAGE_IMPLEMENTATION
类似这样的包围:
#ifndef STB_IMAGE_H_INCLUDED_
#define STB_IMAGE_H_INCLUDED_
void some_func(args);
#endif // STB_IMAGE_H_INCLUDED_
#ifdef STB_IMAGE_IMPLEMENTATION
void some_func(args) {
// implementation
}
#endif // STB_IMAGE_IMPLEMENTATION;
然后一个(最好是不是 main.cpp 的源)文件定义了一个具有相同名称的宏,并在之后包含标题,如下所示:
#include <…>
#include <…>
#define STB_IMAGE_IMPLEMENTATION
#include <stb_image.h>
// other code
你为什么要使用一个而不是另一个?(或者更确切地说,为什么 stbi 会这样做?)