我想知道操作符传递到宏中是如何工作的。它们是来自glib源代码(
在代码中,您使用assert作为
glib/testutils.h
)的宏。在代码中,您使用assert作为
g_assert_cmpint(1, ==, 2);
,所以运算符就直接传递了进去。它是如何工作的?在这个宏中,#
代表什么意思?#define g_assert_cmpint(n1, cmp, n2) \
G_STMT_START { \
gint64 __n1 = (n1), __n2 = (n2); \
if (__n1 cmp __n2) ; \
else \
g_assertion_message_cmpnum( \
G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
#n1 " " #cmp " " #n2, __n1, #cmp, __n2, 'i'); \
} G_STMT_END
g_assert_message_cmpnum
具有以下接口:
void g_assertion_message_cmpnum(const char *domain, \
const char *file,\
int line,\
const char func,\
const char *expr,\
long double arg1, \
const char *cmp,\
long double arg2,\
char numtype);
这是否意味着 #
将 cmp
运算符转换为字符串?
但是如何理解来自宏的这一行代码 #n1 " " #cmp " " #n2
?
cout
和endl
可能会遇到困难。(我同意你回答的其他部分) - David C. Rankin