| 引数を文字列化する関数マクロ (文字列化演算子 #) |
|
| |
#define FormatTest( strType ) \
wsprintf( szBuffer, "***%" #strType "***", a ); \
printf( "%s\n", szBuffer );
// *********************************************************
// エントリボイント
// *********************************************************
int main(int argc, char* argv[])
{
char szBuffer[512];
char *a;
a = "abcd";
FormatTest( s )
FormatTest( 8s )
FormatTest( -8s )
FormatTest( 08s )
return 0;
}
| |
|
以下はプリプロセッサの変換結果
| |
int main(int argc, char* argv[])
{
char szBuffer[512];
char *a;
a = "abcd";
wsprintfA( szBuffer, "***%" "s" "***", a ); printf( "%s\n", szBuffer );
wsprintfA( szBuffer, "***%" "8s" "***", a ); printf( "%s\n", szBuffer );
wsprintfA( szBuffer, "***%" "-8s" "***", a ); printf( "%s\n", szBuffer );
wsprintfA( szBuffer, "***%" "08s" "***", a ); printf( "%s\n", szBuffer );
return 0;
}
| |
|
|
|
| |
#define add( a, b ) a += b
// *********************************************************
// エントリボイント
// *********************************************************
int main(int argc, char* argv[])
{
int x = 10;
add( x, 10 );
// 変換すると x += 10; です
return 0;
}
| |
|
|
| トークンの一部を置き換えるマクロ (トークン連結演算子 ##) |
|
| |
#define idrep( n ) printf( "%d\n", x##n );
// *********************************************************
// エントリボイント
// *********************************************************
int main(int argc, char* argv[])
{
int x1 = 1;
int x2 = 2;
int x3 = 3;
idrep( 2 );
return 0;
}
| |
|
| |
int main(int argc, char* argv[])
{
int x1 = 1;
int x2 = 2;
int x3 = 3;
printf( "%d\n", x2 );;
return 0;
}
| |
|
|
|
| |
#define mymax(x,a,b,c) \
if ( a <= b ) { \
if ( b <= c ) { \
x = c; \
} \
else { \
x = b; \
} \
} \
else { \
if ( a <= c ) { \
x = c; \
} \
else { \
x = a; \
} \
}
// *********************************************************
// エントリボイント
// *********************************************************
int main(int argc, char* argv[])
{
int x;
mymax(x,20,100,70)
printf( "%d\n", x );
return 0;
}
| |
|
|
|
| |
#define SetOptionFlg(section,ID,name) \
if ( Dlg->ButtonIsCheck( IDC_##ID ) ) { \
Sql->b##name = 1; \
} \
else { \
Sql->b##name = 0; \
} \
Ini.WritePrintf( #section, #name, "%d", Sql->b##name );
| |
|
| |
// システムテーブルを表示しない
SetOptionFlg(SQLServer,NOSYSTEMTABLE,NoSystemTable)
// システムビューを表示しない
SetOptionFlg(SQLServer,NOSYSTEMVIEW,NoSystemView)
| |
|
|
|
|