Archive

标签为 ‘c++’的文章

socket学习-粗糙的实现

虽然很想搞底层的东西,但是一直没啥机会
写写配置,改改逻辑,那些重要的东西都忘记了
还是得找时间自己更深入点

这份东西可以与cmd的telnet命令配合调试 完整阅读

[转]内存划分,堆栈区分

一直对内存区域的划分,程序变量的内存分配问题模糊不清。进行多方参考总结如下。

一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
完整阅读

关于c++宏定义中的井号#

今天重新看了下fastdb注册类的宏定义
发现了#和##
搜了下,发现这两个在宏定义中满实用的

看这样一个例子

1
2
3
4
5
6
7
8
9
// preprocessor_token_pasting.cpp
#include [stdio.h]
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
 
int main()
{
   paster(9);
}

这个是在msdn上拿下来的
宏定义我理解成编译的时候把所定义的内容复制的对应的地方
有参数,则把参数当字符串插入到两个空格中间,当然这两个空格不能是在双引号中的

但如果咬在双引号中或者一个字符串中插入东西
那就需要#和##了
#符是把传递过来的参数当成字符串进行替代。
##连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串

#n最后会用”9″来代替
而##n则会用9,其实##起了一个连接作用

那么paster(9)会变成
printf_s( “token” “9″ ” = %d”, token9 )
也就是printf_s( “token9 = %d”, token9 )

可想而知,如果没有#n而是n的话
那么paster(9)会变成
printf_s( “token” n ” = %d”, token9 )