【发布时间】:2017-06-05 13:05:33
【问题描述】:
我向here 提出了一个关于assert 的问题,该问题在标准中作为宏而不是函数实现。
这给我带来了一个问题,因为assert 似乎是一个函数,它采用参数的方式:assert(true) 因此我尝试将它用作:std::assert(true),当然是一个宏没用。
我的问题是:标准库提供的其他宏是否会显示为带参数的函数?
【问题讨论】:
-
您可以找到一份标准的副本here - 现在开始阅读 ;-)
-
offsetof是一个典型的类似函数的宏。其他函数可以实现为宏或适当的函数(尽管对于 C 函数更是如此,因为所有 C++ 函数都必须位于std命名空间中)。 -
@riodoro1 你不需要某些东西成为宏就能以这种方式关闭它..
-
@JesperJuhl 是的,但您确实需要它是一个宏才能打印断言失败的表达式。
-
您将不得不查看 C。[headers]/5 在 C 中定义为宏的名称应在 C++ 标准库中定义为宏,即使 C 授予作为功能实施的许可证。 [ 注意:在 C 中定义为宏的名称包括:assert、offsetof、setjmp、va_arg、va_end 和 va_start。 ——尾注]
标签: c++ parameters macros namespaces assert