如何编写C头文件

电脑杂谈  发布时间:2020-07-10 08:11:37  来源:网络整理

random 头文件_random函数头文件_random 头文件

一些使用C语言的初学者不知道头文件(* .h文件)可以自己编写. 只知道在调用系统库函数时,必须使用#include语句包括一些头文件. 实际上,头文件(如.C文件)可以由您自己编写. 头文件是一个文本文件. 使用文本编辑器编写代码后,将其保存为扩展名.h. 头文件通常放置一些可重用的代码,例如函数声明,变量声明,常量定义,宏定义等. 当使用#include语句引用头文件时,等效于将头文件中的所有内容复制到#include中. 为了避免由于重复引用而导致的编译错误,头文件通常具有

#ifndef   LABEL
#define   LABEL
 //代码部分
#endif

格式. 其中,LABEL是唯一标签,其命名规则与变量相同. 通常根据其所在的头文件的名称来命名. 例如,如果头文件的文件名称为hardware.h,则可以这样使用它:

#ifndef   __HARDWARE_H__
#define   __HARDWARE_H__
  //代码部分
#endif

random 头文件_random 头文件_random函数头文件

这意味着如果未定义__HARDWARE_H__,则将定义__HARDWARE_H__,并编译以下代码部分,直到遇到#endif. 这样,在重复引用时,由于已定义__HARDWARE_H__,因此不会编译代码的以下部分,从而避免了重复定义.

另一个地方是,当使用包含时,使用引号和尖括号的含义是不同的. 使用引号(“”)时,首先搜索项目文件所在的目录,然后搜索编译器头文件所在的目录. 使用尖括号(<>)时,搜索顺序相反. 假设我们有两个具有相同文件名的头文件hardware.h,但是内容不同. 一个保存在编译器指定的头文件目录中,我们称其为文件I;另一个保存在当前项目目录中,我们称之为文件II. 如果使用#include ,则引用文件I. 如果使用#include“ hardware.h”,则引用文件II. 我以前见过一个同事,问,为什么他修改该头文件的内容,就好像它没有被修改一样?这是因为他有两个相同的头文件(如我们刚刚所述),使用#include 进行引用,并且在对其进行修改时random 头文件,它是当前项目所在目录中的文件.

作者用来编写C程序的IDE是CodeBlokcs,我的头文件放在D: \ CodeBlocks \ MinGW \ include文件夹中.

当我们编写C语言或C ++语言时,预处理文件全部表示为#include ,#include 或#include 等. 这里的“ h”表示头文件. 那么头文件是什么?什么是头文件?如果不添加“ h”,则运行该程序,看来它仍然可以成功运行,但是是否添加它并不重要? #include语句用作文件include. 功能是将指定文件而不是命令行插入命令行位置,从而将指定文件和当前源程序文件连接到源文件中. 要求该语句必须在源程序的最前面.

random 头文件_random函数头文件_random 头文件

所谓的“头文件”是指在源文件的头引入的文件. 顾名思义,它是头文件. 至于头文件本身,没有固定的格式和固定的扩展名. 您可以包括自己的C文件作为头文件. 至于扩展名h,它表示系统提供的头文件的类型. 如果是TC,则常规头文件路径为: TC / INCLUDE. 头文件都是纯文本格式,内容主要是函数定义或函数体.

在调用系统函数时,某些函数必须包含相应的头文件,然后才能使用它们. 例如,确定是否为字母的isalpha函数必须包含ctype.h头文件. 有些不是必需的,因为默认情况下已包含系统. 例如random 头文件,默认情况下包含包含Printf函数的头文件stdio.h. 尽管显示没有问题.

此外,对于系统提供的头文件,例如ctype.h,如果未编写扩展名,则系统将找不到该头文件,并且无法实现所包含的功能. 因此,正确的系统.h文件必须带有扩展名.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#ifndef RANDOMNUMBER_H_INCLUDED
#define RANDOMNUMBER_H_INCLUDED
#endif // RANDOMNUMBER_H_INCLUDED
//随机数库实现
void Randomize()
{
    srand((unsigned)time(NULL));   //使用当前时间作为伪随机数
}
int GenerateRandomNumber(int low, int high)
{
    double _d;
    if(low > high)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
        // 打印出红色字体
        printf("Make sure input number: Low < High .\n");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
        // 打印默认字体
        exit(0);
    }
    _d = (double)rand()/((double)RAND_MAX + 1.0);
    return low + (int)(_d * (high - low +1));
}
double GenerateRandomReal(double low, double high)
{
    double _d;
    if(low > high)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
        printf("Make sure input number: Low < High .\n");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
        exit(0);
    }
    _d = (double)rand()/((double)RAND_MAX + 1.0);
    return low + _d * (high - low);
}

random 头文件_random函数头文件_random 头文件

现在我们只需要写入需要使用随机数的文件

#ifndef RANDOMNUMBER_H_INCLUDED
#include "random_number.h"
#endif // RANDOMNUMBER_H_INCLUDED

您可以使用上面的函数调用.

以上文件仅写入头文件,并将定义和实现写入头文件. 实际上,我们可以将定义和实现分开(为了更好的封装,让用户专注于使用接口,而忽略实现细节).

random函数头文件_random 头文件_random 头文件

头文件(random_number.h)中的代码如下:


#ifndef RANDOM_H_INCLUDED
#define RANDOM_H_INCLUDED
void Randomize();    //初始化伪随机数发生器
int GenerateRandomNumber(int low, int high);         //生成一个随机整数介于low 和 high 之间
double GenerateRandomReal(double low, double high);        //生成一个随机实数介于low 和 high 之间
#endif // RANDOM_H_INCLUDED

同时,需要一个.c文件来实现头文件中定义的功能. (Random_number.c)具体代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#ifndef RANDOM_H_INCLUDED
#include "random.h"
#endif
//随机数库实现
void Randomize()
{
    srand((unsigned)time(NULL));   //使用当前时间作为伪随机数
}
int GenerateRandomNumber(int low, int high)
{
    double _d;
    if(low > high)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
        // 打印出红色字体
        printf("Make sure input number: Low < High .\n");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
        // 打印默认字体
        exit(0);
    }
    _d = (double)rand()/((double)RAND_MAX + 1.0);
    return low + (int)(_d * (high - low +1));
}
double GenerateRandomReal(double low, double high)
{
    double _d;
    if(low > high)
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
        printf("Make sure input number: Low < High .\n");
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
        exit(0);
    }
    _d = (double)rand()/((double)RAND_MAX + 1.0);
    return low + _d * (high - low);
}

此库使用与上一个库相同的方法. 但是我们建议您撰写更多文章


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-275087-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 马道洋
        马道洋

        如果是包装漏气了

      • 刘宇博
        刘宇博

        美国佬在叙利亚被普京把了脸跑到南海来撒野

      热点图片
      拼命载入中...