头文件管理 使用#ifndef防止多重包含 部分头文件用途及其中的函数介绍

       1、 在同一个文件中只能将同一个头文件包含一次。记住这个规则很容易,但很可能在不知情的情况下将头文件包含多次。例如,可能使用包含了另一个头文件的头文件。有一种标准的C++技术可以避免多次包含同一个头文件。它是基于预处理器编译指令#ifndef(即if not define)的。下面的代码片段:

        #ifndef COORDIN_H_

        ...

        #endif

         意味着仅当以前没有使用预处理器编译指令#define定义名称COORDIN_H_时,才处理#ifndef和#endif之间的语句。

         通常,使用#define语句来创建符号常量,如下所示:

         #define MAXIMUM 4096

          但只要将#define用于名称,就足以完成名称的定义,如下所示:

          #define COORDIH_H_

           

         使用这种技术是为了将文件内容包含在#ifndef中:

 #ifndef COORDIH_H_
 #define COORDIH_H_

//place include file contents here

 #endif

          编译器首次遇到该文件时,名称COORDIH_H_没有定义(我们根据include文件名来选择名称,并加上一些下划线,以创建一个在其他地方不太可能被定义的名称)。在这种情况下,编译器将查看#ifndef和#endif之间的内容(这正是我们希望的),并读取定义COORDIN_H_的一行。如果在同一个文件中遇到其他包含coordin.h的代码,编译器知道COORDIN_H_已经被定义了,从而调到#endif后面的一行上。注意,这种方法并不能防止编译器将文件包含两次,而只是让它忽略除第一次包含之外的所有内容。大多数标准C和C++头文件都是用这种防护(guarding)方案。

2、部分头文件

cstdlib:C++中的一些库函数头文件,包含了rand()和srand()的原型。

cstime:时间函数头文件,包含了time()的原型。

cmath:数学计算相关函数。

(1)rand()函数和srand()函数

int main()
{
    ......
    srand(time(0));
    ......
    while(cin>>target)
    {
       ......
       direction=rand()%360;
       step.set(dstep,direction,'p');
       ......
    }

    return 0;
}

         rand()函数:它返回一个从0到某个值(取决于实现)之间的随机整数。该程序使用求模操作数来获得一个0~359的角度值。rand()函数将一种算法用于一个初始种子值来获得随机数,该随机值将用作下一次函数调用的种子,依此类推。这些数实际上是伪随机数,因为10此连续的调用通常将生成10个同样的随机数(具体取决于实现)。不过,srand()函数允许覆盖默认的种子值,重新启动另一个随机数序列。该程序使用time(0)的返回值来设置种子。time(0)函数返回当前时间,通常为从某一个日期开始的秒数(更广义地,time()接受time_t变量的地址,将时间放到该变量中,并返回它。将0用于地址参数,可以省略time_t变量声明)。因此,下面的语句:

          srand(time(0));

在每次运行程序时,都将设置不同的种子,使随机输出看上去更为随机。

                要使用rand()产生随机数时,需在此之前使用srand()使产生的随机数更加随机。

猜你喜欢

转载自blog.csdn.net/qq_35820102/article/details/82958299
今日推荐