C语言:你不知道的事(关于头文件)

版权声明:请尊重每一个人的劳动成果 https://blog.csdn.net/jamenu/article/details/84973385

前言:我之前的稿子因为我尝试着复制一大串代码而崩溃了,大概1千来字,全都没有了,现在这是从写的。我的内心毫无波澜,甚至还有点想笑

在我们刚开始学C语言时,我们都知道要在程序的第一行打
#include <stdio.h>
现在拿helloworld为例

#include <stdio.h>
int main()
{
 printf("helloworld");
}

我们都知道要打 #include <stdio.h>
书上给我们的解释并不全面;只是说用调用标准函数库,
因为这些库中有我们学习C语言以来所用到的常用的和重要的函数
printf,scanf(),getchar,puts,gets
等等一些非常熟悉的函数
后来,随着学习的深入,我们学习了关于数学的函数
#include <math.h>
在其中,我们知道了用sqrt是开平方函数,
pow是求指数函数,并运用我们的实践之中

再之后当我们学习到关于字符串的时候,我们又了解了字符串处理函数要引用
#include <string.h>
其中有着如
strcat字符串连接函数
strcpy字符串复制函数
strcmp字符串比较函数(注意有三个不同的返回值及比较的规则)
strlen字符串测量函数(注意与sizeof的区别)
等等等等,
这个时候还有题目要我们编写与自己的字符串连接函数和和衣服穿复制函数

后来,我们学习指针和结构体的知识的时候,我们又认识了
#include <stdlib.h>
其中也有我们常用的一些函数
malloc
分配 size 字节的存储区
**返回值:**所分配的内存区地址,如果内存不够,返回0
(这在结构体和链表那一章中经常用到)
rand
随机产生一个产生0到32767间的随机整数(0到0x7fff之间)
在很久之前的一道计算游戏中的题中我们遇到过,并用它来生成数字。
但要注意的是,如果想要每一次运行都是不一样的值的话,我们需要添加如下语句
srand((int)time(NULL));
下面是我在查阅百度是找到的解释

c语言中语句srand( (time(NULL) ) ; 表示设置一个随机种子,每次运行都能保证随机种子不同。在C语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,它是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的。
因此,C提供了srand()函数,它的原型是 void srand( int a)。用来改变这个种子值。
srand( (time(NULL) )中time(NULL)函数是得到一个从1900年1月1日到现在的时间秒数,这样每一次运行程序的时间的不同就可以保证得到不同的随机数了。

当我们慢慢的学到第7章关于函数的知识的时候
我们常常要写一个一个的函数,有的时候,我们面对同一个问题,每次解决的时候就要再打一遍那个函数,当我们面对的问题比较复杂。要用到不同的函数。
我们就要打很多行的代码,每个函数占的空间又很多
降低了可读性,并且不美观精简

那么有没有一种方法可以不用敲重复的代码而且让程序更美观,逻辑更清晰呢?
。。。。。。。。。。
。。。。。。。
。。。。。
没有,滚!
是不能的

这时我们就有必要写一个头文件把日常常用的一些函数,或者结构体的定义或声明放在里面,把它放到编译器的根目录中的include文件夹中;
在这里插入图片描述

这是VC++6.0的路径
在这里插入图片描述

这是C FREE5的路径,也是我主要使用的编译器;

下面我们要创建一个头文件,我在昨天已经创建了一个把它直接拿出来

#ifndef _LIHAN_H_
#define _LIHAN_H_    //这两行和endif是为了防止重定义
#include <stdio.h>    //引用标记库函数
#include <string.h>
int  test(char* p,int n); //函数的声明
static int ops,aos,fos,los,flag1;
void putstars()                //我为了避免写多个文件将定义也放在了这里,这是个不好的示范,头文件应尽量只放函数的声明,因为定义一旦内容多起来就不容易管理了
{
 printf("******************");
}
void put_int_array(int a[],int n)
{
    int ops=0;
 
    for(;ops<n;ops++)
    {
          printf("%5d",a[ops]);
    }
}
void input_int_array(int a[],int n)
{
     int ops=0;
 
     for(;ops<n;ops++)
     {
          scanf("%d",&a[ops]);
     }
}
int primenumber(int aos)
{
     flag1 = 1;
     if(aos==1)flag1=0;
     for(fos=2;fos<=aos-1;fos++)
     {
     if(aos%fos==0)
     {
          flag1 = 0;break;
      }
 }
 return flag1;
}
#endif

(1)头文件开头处的版权和版本声明;
(2)预处理块;
(3)inline函数的定义;
(4)函数和类结构声明等。在头文件中,用 ifndef/define/endif结构产生预处理块,用 #include 格式来引用库的头文件。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识。
下面我们以stdio来展示以下
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下面我们来尝试调用我们的头文件

#include <stdio.h>
#include "lihan.h"
int main()
{
 int a[10];
 input_int_array(a,10);  //输入整形数组函数
 put_int_array(a,10);     //输出整形数组函数
}

下面是程序运行截图
在这里插入图片描述

这样,我们就省去了打两个for循环,和设变量的时间,程序就精简了。
由于事很多,我只在其中写了三个函数(一个实验用的输出星星函数),
大家可以学会了之后,可以添加自己的成果。
今天的博客没有多少代码,所以显得稍短一点,
要这样想,你写了别人没有的东西,不论实现难度的高低,与复杂程度,对于你来说
都应该是一种创新。

双12,下午,晴。

猜你喜欢

转载自blog.csdn.net/jamenu/article/details/84973385