C/C++小知识总结之二

1、 #include<conio.h>

conioConsole Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。


2、#include"Kalman_k.h"

      #include<conio.h>

    有的程序用<>,有的却用" ",那么二者到底什么区别呢,什么情况下使用呢?
<>和""表示编译器在搜索头文件时的顺序不同,<>表示从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录;" "是表示从当前目录开始搜索,然后是系统目录和PATH环境变量所列出的目录。
所以,系统头文件一般用<>,用户自己定义的则可以使用" ",加快搜索速度。

3、 #开头的语句,是预编译指令。也就是说,这些语句,在编译之前,就对他们进行了处理。
    有些程序在调试、兼容性、平台移植等情况下可能想要通过简单地设置一些参数就生成一个不同的软件,这当然可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。
    (1)#if和#endif是配对的,叫做条件编译指令,如果满足#if后面的条件,就编译#if和#endif之间的程序段,否则不编译。
    (2)#if, #elif, #else, #endif
   
   
#if 条件 1
  代码段 1
#elif 条件 2
   代码段 2
...
#elif 条件 n
  代码段 n
#else
  代码段 n+1
#endif

#if 的一般含义是如果#if 后面的常量表达式为true,则编译它所控制的代码,如条件1成立时就代码段1,条件1不成立再
看条件2是否成立,如果条件2成立则编译代码段2,否则再依次类推判断其它条件,如果条件1至n 都不成立则会编译最后的代码段n+1。
4、#include<cstdio>

    在C语言中,stdio.h头文件是主要的。而在后来的C++语言中,C只是C++的一个子集,且C++中,已不推荐再用C的类库,但为了对已有代码的保护,还是对原来的头文件支持。

    cstdio是c++从C的stdio.h继承来的,在前面加C同时不要H后缀,在C++环境当然是选用前者,两者内容都一样,只是cstdio头文件中定义的名字被定义在命名空间std中。使用后者就会带来额外的负担,需要区分哪些是标准库名是C++特有的,哪些是继承过来的!!所以在C++中要尽量避免C风格的出现!!


5、#include <iomanip>

    io代表输入输出,manipmanipulator(操纵器)的缩写(在c++上只能通过输入缩写才有效)。这里面iomanip的作用比较多,经常配合setw()使用,用于控制数据的输出格式。setw(n)设域宽为n个字符。

例如:   cout<<setw(3)<<1<<setw(3)<<10<<setw(3)<<100;


6、#include <cmath>  

#include <ctime>

#include <cstdlib>

VC里面是math.h,cmath是c++标准风格的头文件,位于std命名空间,用法和math.h差不多,都是包含一些常见的数学函数,比如平方、正余弦等等。

在C++里Include C的头文件,就需要在原来的.h文件前加个c,并去掉.h,那两个头文件对应c中的stdlib.h和time.h。就是将原来的time.h和stdlib.h放在命名空间中了。cstdlib就是c中的stdlib.h 因为用到srand和rand;ctime就是c中的time.h,因为用到time时间函数。

cstdlib就是c中的stdlib.h,用到下列东西时要用 #include <cstdlib>
字符转换函数:
atof,atoi,atol,strtod,strtol,strtoul 
伪随机数函数:
rand,srand
动态分配内存函数:
calloc,free,malloc,realloc
环境函数:
abort,atexit,exit,getenv,system
查找,分类函数:
bsearch,qsort
整数计算函数:
abs,div,labs,ldiv,
多字节文字(中日韩文)函数:
mblen,mbtowc,wctomb
mbstowcs,wcstombs,

宏:
EXIT_FAILURE,
EXIT_SUCCESS,
MB_CUR_MAX,
NULL,RAND_MAX,

类型:
div_t,ldiv_t,size_t


 
 
7、srand()的作用是生成一个“种子”,然后你再用rand()取随机数的时候就用这个种子来经过计算得到一个数字。在种子相同的情况下rand()的结果是一样的,所以为了保证rand()的随机性,经常用当前的时间作为种子,这样就可以保证rand()每次的结果都是不同的。
srand((unsigned)time(NULL));这语句的含义就是以自1970年1月1日00:00:00以来,到调用函数的时刻所累积的秒数作为产生随机数算法的种子seed。 

8、函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。

比如: 【返回类型】 函数名(参数1类型 参数1,参数2类型 参数2,……);
实例:bool swap(int a,int b); 
例子中函数的返回类型为bool型,两个参数都是int型,一个名称为a ,一个名称为b
函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!


9、#ifndef/#define/#endif

 主要目的是防止头文件的重复包含和编译 

 http://blog.sina.com.cn/s/blog_6398cade0100hi69.html

C++中 #ifdef 和#endif的作用

http://blog.csdn.net/fly_yr/article/details/39964035

10、

#define是用来定义宏的。不是定义非零值的。其定义的宏,会在编译的时候自动替换。
比如:
  #define PI 3.1415926
  以后的代码中凡是出现 PI 的地方,编译器直接给替换为3.1415926。
#define 的时候,一定要注意:编译器是直接替换的。
比如:
  #define add(a,b) a+b  //把a + b这样的操作用函数表示。以后你就可以直接用add(a,b)来表示a和b的和了。
  现在你要计算: e = d * (a + b);
 如果你这样写:
    e = d * add(a,b);
  那就错了,因为编译器会将#defineadd(a,b)替换为 a+b,结果就成了: e = d * a + b就错了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值