C/C++中macro的ifndef

以下節錄一段icu unicode lib的文件裡的sample

#ifndef U_CHARSET_IS_UTF8
#   define U_CHARSET_IS_UTF8 0
#endif

理論上,這類的macro會定義在header file,
而一般header file都會有include guard,所以不會重複include
那為什麼要在U_CHARSET_IS_UTF8再檢查一次是否定義過呢?

主要的原因是發生了不在此header定義了這個macro
可能來自於其他header,也可能來自於compiler參數
例如

g++ … -DU_CHARSET_IS_UTF8=1

這樣就可以透過makefile來做一些動態的macro值改變的處理

This entry was posted in C++ Language. Bookmark the permalink.

Leave a Reply