strcpy_s

strcpy_sというMicrosoftが推奨する安全なstrcpyというのがあるのですが、これが、

errno_t strcpy_s(char *strDestination, size_t sizeInBytes, const char *strSource);

というプロトタイプになっており、まぁ、sizeInBytesのおかげで安全に暮らせるのですが、実は

Security Enhancements in the CRT

に書いてある面白い機能があって、C++ならば、

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1

というマクロを定義すると、

char szBuf[10]; 
strcpy(szBuf, "test");

というコードが、自動的に、

char szBuf[10]; 
strcpy(szBuf, sizeof(szBuf), "test");

相当のコードになるようです。まぁ、ただのテンプレートを使ったテクニックではありますが、目から鱗ではあります。

一応、MSDNには固定長の配列の話しか書いてありませんが、ポインタ以外であれば、vectorやstring、CStringにも応用できるテクニックではあります。