之前写了个小程序。包含了头文件Node.h
接着主文件中是:
但是运行程序时报错!
原因是在Year函数在Dis函数后面,而在Dis函数前又没有Year函数的声明,所以在Dis函数中调用Year函数会报错,找不到嘛。
这可以联系单模块中的程序编程,main函数中调用的函数有两种方式:
1、在Main函数前先定义,告诉编译器,有这个函数,先留点空间。然后在main函数后进行函数的定义。
2、在main函数前直接进行函数的定义。
下面来来聊一下头文件。
c头文件的功能是:在编译预处理时,用文件包含指令中所指定的文件名的文本内容来替代该命令,是包含该文件的内容成为本程序的一部分。
举个例子。
该例子包含两个模块:(共三个文件)Utility.h,Utility.c,Main.c
三个文件内容如下:
Utility.c:
Main.c:
文件包含预处理指令执行结束后(这里不包含stdio.h的处理),代码如下:
程序在编译时是单文件编译的,所以当编译Node.h时,发现不满足函数先定义后调用,故报错!
在看下面一个程序:
Node.c中程序:
Main.c中程序:
结果发现编译不通过,道理是一样的!
编译Node.c文件时,函数不满足先定义后调用,所以报错,尽管在main.c中有函数声明,但不在同一个文件中!
程序如下:
Node.h中是:
#include<stdio.h>
void Dis()
{
int year;
printf("Please input a year!\n");
scanf("%d",&year);
Year(year);
}
void Year(int year)
{
printf("The year is: %d\n",year);
}
接着主文件中是:
#include <stdio.h>
#include "Node.h"
int main()
{
Dis();
return 1;
}
但是运行程序时报错!
原因是在Year函数在Dis函数后面,而在Dis函数前又没有Year函数的声明,所以在Dis函数中调用Year函数会报错,找不到嘛。
这可以联系单模块中的程序编程,main函数中调用的函数有两种方式:
1、在Main函数前先定义,告诉编译器,有这个函数,先留点空间。然后在main函数后进行函数的定义。
2、在main函数前直接进行函数的定义。
下面来来聊一下头文件。
c头文件的功能是:在编译预处理时,用文件包含指令中所指定的文件名的文本内容来替代该命令,是包含该文件的内容成为本程序的一部分。
举个例子。
该例子包含两个模块:(共三个文件)Utility.h,Utility.c,Main.c
三个文件内容如下:
Utility.h:
#ifndef UTILITY_H
#define UTILITY_H
void Display();
int DaysOfYear();
#endif
Utility.c:
#include <stdio.h>
int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};
void Display()
{
int m;
for (m=0;m<12;m++)
{
printf("%3d",dys[m]);
}
printf("\n");
}
int DaysOfYear()
{
int m,t=0;
for (m=1;m<=12;m++)
{
t+=dys[m-1];
}
return t;
}
Main.c:
#include <stdio.h>
#include "utility.h"
int main()
{
Display();
printf("%d\n",DaysOfYear());
return 0;
}
文件包含预处理指令执行结束后(这里不包含stdio.h的处理),代码如下:
#include <stdio.h>
void Display();
int DaysOfYear();
int dys[]={31,28,31,30,31,30,31,31,30,31,30,31};
void Display()
{
int m;
for (m=0;m<12;m++)
{
printf("%3d",dys[m]);
}
printf("\n");
}
int DaysOfYear()
{
int m,t=0;
for (m=1;m<=12;m++)
{
t+=dys[m-1];
}
return t;
}
int main()
{
Display();
printf("%d\n",DaysOfYear());
return 0;
}
程序在编译时是单文件编译的,所以当编译Node.h时,发现不满足函数先定义后调用,故报错!
在看下面一个程序:
Node.c中程序:
#include<stdio.h>
void Dis()
{
int year;
printf("Please input a year!\n");
scanf("%d",&year);
Year(year);
}
void Year(int year)
{
printf("The year is: %d\n",year);
}
Main.c中程序:
#include <stdio.h>
#include "Node.h"
extern void Dis();
extern void Year(int year);
int main()
{
Dis();
return 1;
}
结果发现编译不通过,道理是一样的!
编译Node.c文件时,函数不满足先定义后调用,所以报错,尽管在main.c中有函数声明,但不在同一个文件中!