簡體   English   中英

為什么在包含stb_image時標頭防護無效?

[英]Why is header guard ineffective when including stb_image?

我要使用stb_image庫,該庫已被作者放入一個很大的頭文件中。 要使用該庫,文檔會告訴我將這兩行添加到我的代碼中。

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

我就是這樣做的,將其放入頭文件中。 我什至確保它包括后衛。

#ifndef STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#endif

鏈接器抱怨。

我查找並找到解決方案。 https://github.com/nothings/stb/issues/3

基本上,我必須將以上兩行添加到cpp文件中,而不是頭文件中。 它像一種魅力。 但是為什么標頭后衛不能以這種方式有效? 我一直在閱讀有關翻譯單元和靜態變量的信息,但我不明白為什么我的方法不起作用。

stb_image.h有其自己的包含防護。 這不是定義STB_IMAGE_IMPLEMENTATION目的。 定義STB_IMAGE_IMPLEMENTATION告訴stb_image.h不僅在其翻譯單元中包括聲明 ,而且還將其功能和變量的定義包括在內。 如果將stb_image.h包含在定義了STB_IMAGE_IMPLEMENTATION多個轉換單元中,則所有這些轉換單元都將具有stb_image的功能和變量的定義,並且違反了一個定義規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM