Stringizing Operator (#)
来源:互联网 发布:linux系统优化脚本 编辑:程序博客网 时间:2024/04/30 11:37
在 assert.h 里面有个叫 _assert的函数 _CRTIMP void __cdecl _assert(void *, void *, unsigned);
也有这个#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )
那么请问 #exp里面的 "#"是什么意思?运算符?
---------------------------------------------------------------------------
转换为字符串
比如#define TURN(exp) #exp
在程序中可以写这样的语法
printf( "%s", TURN(test) );
输出结果为: test
---------------------------------------------------------------------------
The following example shows a macro definition that includes the stringizing operator and a main function that invokes the macro:
#define stringer( x ) printf( #x "/n" )
void main()
{
stringer( In quotes in the printf function call/n );
stringer( "In quotes when printed to the screen"/n );
stringer( "This: /" prints an escaped double quote" );
}
Such invocations would be expanded during preprocessing, producing the following code:
void main()
{
printf( "In quotes in the printf function call/n" "/n" );
printf( "/"In quotes when printed to the screen/"/n" "/n" );
printf( "/"This: ///" prints an escaped double quote/"" "/n" );
}
When the program is run, screen output for each line is as follows:
In quotes in the printf function call
"In quotes when printed to the screen"
"This: /" prints an escaped double quotation mark"
-----------------------------------------------------------------------------
#, ##
The # and ## operators are used with the #define macro. Using # causes the first argument after the # to be returned as a string in quotes. Using ## concatenates what's before the ## with what's after it.
Example code:
For example, the command
#define to_string( s ) # s
will make the compiler turn this command
cout << to_string( Hello World! ) << endl;
into
cout << "Hello World!" << endl;
Here is an example of the ## command:
#define concatenate( x, y ) x ## y
...
int xy = 10;
...
This code will make the compiler turn
cout << concatenate( x, y ) << endl;
into
cout << xy << endl;
which will, of course, display '10' to standard output.
- Stringizing Operator (#)
- c/c++的预处理定义 Stringizing Operator (#) Charizing Operator (#@) Token-Pasting Operator (##)
- c/c++的预处理定义 Stringizing Operator (#) Charizing Operator (#@) Token-Pasting Operator (##)
- 预处理定义操作符Stringizing Operator (#) ,Charizing Operator (#@), Token-Pasting Operator (##)
- 【C++】预处理定义操作符Stringizing Operator (#) ,Charizing Operator (#@), Token-Pasting Operator (##)
- 预处理定义操作符Stringizing Operator (#) ,Charizing Operator (#@), Token-Pasting Operator (##)
- c/c++的预处理定义 Stringizing Operator (#) Charizing Operator (#@) Token-Pasting Operator (##)
- operator->*
- operator[]
- operator
- operator
- operator.*()
- operator[]
- Operator
- operator
- operator
- operator ->
- operator
- 用vfloppy安装CDLinux到硬盘,并修改缺省extra路径参数
- 做自己的系统分析师
- [06-20] 一个释放/运行EXE文件的CHM文件 Trojan.DL.Inject.fg(TrojanDownloader.Small.mp)(第3版)
- Web setup project 相关
- 理想
- Stringizing Operator (#)
- Rootkits 和 Windows Vista
- 在Win9x/NT下获取硬盘物理序列号
- 人生需要规划
- 过犹不及
- IT 非人生活
- C++学习问题
- 老师整我,我整老师
- 世界杯之随笔