使用 _Generic 定义宏给出不允许的类型名
Define macro using _Generic gives typename not allowed
我正在尝试定义一个通用宏,我打算在调试代码时将其用于异常处理。当我尝试编译下面的代码时,它显示 typename not allowed.
我是宏的菜鸟,非常感谢任何和所有帮助。
#define ASSERTEXCP(x) _Generic((x),\
char *: printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x );
char strMsg[2014] = {'[=10=]'}; \
sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
OutputDebugString(strMsg););
#endif
_Generic
是 C++ 重载的 C 方法。 C++ 方法是使用 if constexpr
或重载函数:
#include <type_traits>
#define ASSERTEXCP(x) if constexpr (std::is_same<decltype(x), char *>::value) { \
printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x ); \
char strMsg[2014] = {'[=10=]'}; \
sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
OutputDebugString(strMsg); }
我正在尝试定义一个通用宏,我打算在调试代码时将其用于异常处理。当我尝试编译下面的代码时,它显示 typename not allowed.
我是宏的菜鸟,非常感谢任何和所有帮助。
#define ASSERTEXCP(x) _Generic((x),\
char *: printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x );
char strMsg[2014] = {'[=10=]'}; \
sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
OutputDebugString(strMsg););
#endif
_Generic
是 C++ 重载的 C 方法。 C++ 方法是使用 if constexpr
或重载函数:
#include <type_traits>
#define ASSERTEXCP(x) if constexpr (std::is_same<decltype(x), char *>::value) { \
printf( "assertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x ); \
char strMsg[2014] = {'[=10=]'}; \
sprintf(strMsg, "\nassertion error line %d, file(%s):-> %s\n", __LINE__, __FILE__, x); \
OutputDebugString(strMsg); }