Category Archives: C/C++

C/C++宏定义中的## 连接符与# 符

##连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串(token)联接起来,从而形成一个新的子串。但它不可以是第一个或者最后一个子串。所谓的子串(token)就是指编译器能够识别的最小语法单元。具体的定义在编译原理里有详尽的解释,但不知道也无所谓。同时值得注意的是#符是把传递过来的参数当成字符串进行替代。下面来看看它们是怎样工作的。这是MSDN上的一个例子。 假设程序中已经定义了这样一个带参数的宏: #define paster( n ) printf( “token” #n ” = %d”, token##n ) 同时又定义了一个整形变量: int token9 = 9; 现在在主程序中以下面的方式调用这个宏: paster( 9 ); 那么在编译时,上面的这句话被扩展为: printf( “token” “9″ ” = %d”, token9 ); 注意到在这个例子中,paster(9);中的这个”9”被原封不动的当成了一个字符串,与”token”连接在了一起,从而成为了token9。而#n也被”9”所替代。 可想而知,上面程序运行的结果就是在屏幕上打印出token9=9

26th June 2010 2 Comments Permalink

include的含义(C/C++摘记)

最近开始工作了,涉及的是开源C项目,现在正是一个学习过程。本以为信心满满,以为自己C/C++的基础相当扎实,步入工作才发现,菜得不行。 这种菜,是在阅读项目源代码的过程体现出来的。因为实在是看到了太多的陌生的变量声明或函数声明的方式,看得我真的沉迷了,同时也自卑了。 同时也复习了一遍指针,感觉上理解的层次更高了一层,额,应该说往更底层走了,涉及汇编内容了,还有编译一个程序的过程有了新的认识,对于内存的分配有也了更深刻的理解。 虽然让同事说我指针没学好,呵呵,还是虚心接受吧,还好,遇到的是好同事,它们愿意给我讲解,我很高兴。还有一点,我发现,在使用课本上的一些术语与同事进行沟通的时候,发现会互相误解。。。到底是课本太肤浅还是我学得太肤浅导致我的表达不准确呢?随他去吧。 近日,搜罗了很多自己遇到的疑问的回答,并已进行mark,在这里能够进行一些摘抄的笔记,加油! 下面转自一帖子,原址不便放出,希望对大家有所帮助,对于重要话语,我进行摘录,对一些重要句子进行高亮处理。 #include用于在源代码中引用其他的源代码文件 #include有两种写法: #include <stdio.h> // 使用<>时,编译器仅在系统目录下搜索被引用的文件 #include “stdio.h” // 使用””时,编译器除了在系统目录下搜索,还会在当前目录下搜索引用的文件 系统目录包括哪些? 一个是编译器内定的目录,这些目录是内建在编译器内部的,不可改变(如果要追究的话,可以看这个文件gcc/gcc/collect2.c),一般为: /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3 /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include 可以增加 -nostdinc参数阻止gcc搜索内建路径。 还有一个就是通过-I参数指定的路径 #include的工作原理非常简单,就是将引用文件的内容在#include处展开。 举个例子,有两个文件test.h和main.c /* test.h */ #ifndef TEST_H #define TEST_H #define TEST_STR “This is a … Continue reading

13th May 2010 4 Comments Permalink
Statistical data collected by Statpress SEOlution (blogcraft).