C语言多文件函数调用问题。。

C语言多文件函数调用问题。。,第1张

在调用函数之前,编译器需要知道调用的规则,即调用的参数、参数个数、返回值,以一个文件为单位。

比如在firstc中需要调用play1那么编译器就需要买哦时play1的调用规则,所以一般用int play1();这样的语句说明一下,用extern也可以,由于main中不存在调用play2的语句,就不需要事先声明了;

在secondc中由于play1之前编译器已经编译过了play2,所以知道了play2的调用规则,就可以省略声明语句。

象firstc中调用外部程序比较多时,就将这些声明语句另存成一个h文件,然后用include包含这个h文件就可正常调用了,例如#include<stdioh>

主函数是形式上的进程入口,如果编译并链接成可执行文件(例如exe),必须有且只有一个。

如果仅是编译成一般目标文件(例如obj)作为模块使用,则可没有主函数。如果把目标程序链接为同一个可执行文件(上面的exe是其中的一种情况),那么这些被链接的模块中必须有且只有一个主函数。

====

[原创回答团]

C语言输入输出函数有很多,标准I/O函数中包含了如下几个常用的函数:

scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等

int

getc(FILE

fp)

getc主要是从文件中读出一个字符常用的判断文件是否读取结束的语句为

(ch

=

getc(fp))

!=

EOFEOF为文件结束标志,定义在stdioh中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlibh中一样,文件也可以被理解为一种流,所以当fp为stdin时,getc(stdin)就等同于getchar()了

int

putc(int

ch,FILE

fp)

putc主要是把字符ch写到文件fp中去如果fp为stdout,则putc就等同于putchar()了

int

getchar(void)

getchar主要是从标准输入流读取一个字符默认的标准输入流即stdioh中定义的stdin但是从输入流中读取字符时又涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符当然也可以在while循环中指定终止字符,如下面的语句:while

((c

=

getchar())

!=

'#')这是以#来结束的

int

putchar(int

ch)

putchar(ch)主要是把字符ch写到标准流stdout中去

char

gets(char

str)

gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去

int

puts(char

str)

puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符

char

fgets(char

str,

int

num,

FILE

fp)

str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针fgets的功能是读一行字符,该行的字符数不大于num-1因为fgets函数会在末尾加上一个空字符以构成一个字符串另外fgets在读取到换行符后不会将其省略

int

fputs(char

str,

file

fp)

fputs将str写入fpfputs与puts的不同之处是fputs在打印时并不添加换行符

int

fgetc(FILE

fp)

fgetc从fp的当前位置读取一个字符

int

fputc(int

ch,

file

fp)

fputc是将ch写入fp当前指定位置

int

fscanf(FILE

fp,

char

format,

输入列表)

fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中

int

fprintf(FILE

fp,

char

format,

输出列表)

fprintf将格式化数据写入流式文件中

数据块读写函数

fread

(buffer,size,count,fp);

fwrite(buffer,size,count,fp);

参数说明:

buffer:是一个指针。

对fread

来说,它是读入数据的存放地址。

对fwrite来说,是要输出数据的地址(均指起始地址)。

size:

要读写的字节数。

count:

要进行读写多少个size字节的数据项。

fp:

文件型指针。

#include <stdioh>

#define TYPE int

// 下面是加减乘除 4 个函数

TYPE add(TYPE a, TYPE b){return a+b;}

TYPE sub(TYPE a, TYPE b){return a-b;}

TYPE muti(TYPE a, TYPE b){return ab;}

TYPE div(TYPE a, TYPE b){return a/b;}

int main(int argc, char argv[])

{

// 函数指针数组,一共有 4 四个元素,分别是:

// 加减乘除 4 个函数的函数指针

// 你可以自己再添加其他函数,而不用修改代码。

TYPE (functions[])(TYPE, TYPE) = {add,sub,muti,div};

// 函数指针数组中的元素个数,这里是 4 个。

unsigned int n = sizeof(functions)/sizeof(functions[0]);

// 要进行运算的数字

TYPE a = 10, b = 5 , result;

int i=0;

for(i=0; i<n; i++)

{// 调用函数指针数组里面的所有函数。

result = functions[i](a,b);

printf("%d\n", result);

}

return 0;

}

现在刚学练习写程序是练习语法,看不出优越性。

主要体现在:

1、以后编写相对大型的代码或者课程设计作业,多次需要同一种功能(比如对数据的输出或者计算某种数据结构的长度等),那么你可以在需要的时候再main函数插入同样的一段代码也就是敲上同样的或者仅有几个参数差别的代码。这样,是好看了,但是代码长度太长了,显得比较冗杂又占用空间。所以呢,对这种多次使用的功能单独编写成一个函数,那些可能仅仅一个或者几个参数不一样的情况就作为形参实参了。

2、代码可读性好。没一个函数功能独立,都是实现自己的一种预定的功能。方便编程者阅读。

共八种:分类函数,数学函数,目录函数,进程函数,诊断函数,接口子程序, *** 作函数,时间日期函数 你可以在百度文库里查看各函数的详细信息及用法http://wenkubaiducom/view/97c384360b4c2e3f572763d9html

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12155078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存