c+:#defineの#と##
#define
命令は、識別子をマクロとして定義し、すなわち、コンパイラがその後に現れるすべての識別子を置換リストに置換することを示し、さらに処理することもできる.識別子が任意のタイプのマクロとして定義されている場合、これらの定義が同じでない限り、プログラムは適切ではありません.たとえば、次のようなものです.#ifndef INCLUDE_ // inlcude
#define INCLUDE_
// ,
#endif
もちろん、複雑な方法の代わりにマクロを定義します.文法は簡単です.
#define identifier token-string( )
#define identifier ( identifier, ... , identifier) token-string( )
では、defineのいくつかの特殊な文字はどういう意味ですか?
1.文字列化(例:
#define LogMessage(a) printf("The message is: %s", #a);
LogMessage(WARNING) //The message is:WARNING
string ppp="abcdef";
LogMessage(ppp) //The message is: ppp; not "abcdef"
2.##記号接続操作例:
#define Sum_Number(b) Num##b
#define Num9 999
Sum_Number(9) //999
3.#@文字化、例:
#define TEST(tp,charactor) \
{ \
char a[100]{0};\
sprintf_s("%s,%c", #tp, #@charactor); \
TRACE(a); \
}
TEST(WARNING, C); // ,WARNING, C