使用 %s 进行格式化时,# 代表什么
我遇到了这个断言示例,并且想知道 #
的用途:
#define ASSERT( x ) if ( !( x ) ) { \
int *p = NULL; \
DBGPRINTF("Assert failed: [%s]\r\n Halting.", #x); \
*p=1; \
}
I came across this example of an assertion and was wondering what the #
is for:
#define ASSERT( x ) if ( !( x ) ) { \
int *p = NULL; \
DBGPRINTF("Assert failed: [%s]\r\n Halting.", #x); \
*p=1; \
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
它是“字符串化”预处理运算符。
它采用作为参数传递给宏参数 x 的标记,并将它们转换为字符串文字。
It is the "stringize" preprocessing operator.
It takes the tokens passed as the argument to the macro parameter
x
and turns them into a string literal.#x
是字符串化指令#define Stringify(x) #x
表示
Stringify(abc)
将被替换为"abc"
如
#x
is the stringification directive#define Stringify(x) #x
means
Stringify(abc)
will be substituted with"abc"
as in
#
是预处理器的“字符串化”运算符 。它将宏参数转换为字符串文字。如果您调用ASSERT(foo >= 32)
,则在宏求值期间,#x
将扩展为"foo >= 32"
。#
is the preprocessor's "stringizing" operator. It turns macro parameters into string literals. If you calledASSERT(foo >= 32)
the#x
is expanded to"foo >= 32"
during evaluation of the macro.这是一个名为字符串化的预处理器功能。它
It's a preprocessor feature called stringification. It
#
是第 6.10.3.2 节 (C99) 和第 16.3.2 节中定义的字符串化运算符。 (C++03)它将宏参数转换为字符串文字,而不扩展参数定义。
例如,从语法上讲,字符串文字中反斜杠字符的出现仅限于转义序列。
在以下示例中:
#
运算符的结果不必是"a \ b"
。#
is the stringizing operator defined in Section 6.10.3.2 (C99) and in Section 16.3.2. (C++03)It converts macro parameters to string literals without expanding the parameter definition.
For instance, syntactically, occurrences of the backslash character in string literals are limited to escape sequences.
In the following example:
the result of the
#
operator need not be"a \ b"
.这是字符串化运算符。
http://msdn.microsoft.com/en-我们/library/7e3a913x(v=vs.80).aspx
It's the stringizing operator.
http://msdn.microsoft.com/en-us/library/7e3a913x(v=vs.80).aspx
您所看到的称为字符串化。它允许您将宏的参数转换为字符串文字。您可以在这里阅读更多相关信息 http://gcc.gnu.org/onlinedocs/cpp/字符串化.html。
What you see is called stringification. It allows you to convert an argument of a macro into a string literal. You can read more about it here http://gcc.gnu.org/onlinedocs/cpp/Stringification.html.