首页 > 其他分享 >函数的声明与定义 include .h .c

函数的声明与定义 include .h .c

时间:2022-10-31 20:35:51浏览次数:42  
标签:main 定义 int sum 源文件 include 函数

1函数的定义

函数定义的格式: 数值返回类型  参数名(参数形式)

                              { 执行语句

                                返回语句

                               }

int main()
{
    int c = sum(1, 4);
    return 0;
}

在C语言中,函数的定义顺序是有讲究的:默认情况下,只有后面定义的函数才可以调用前面定义过的函数。

如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明 1 // 只是做个函数声明,并不用实现

 2 int sum(int a, int b);
 3 
 4 int main()
 5 {
 6     int c = sum(1, 4);
 7     return 0;
 8 }
 9 
10 // 函数的定义(实现)
11 int sum(int a, int b) {
12     return a + b;
13 }
但是在链接的时候会报错,因为没有检测到sum的定义 C语言在编译运行时候不会检测函数有没有定义,但是在进行链接时候会检测。

2 函数的声明

         格式

返回值类型 函数名 (参数1, 参数2, ...)

只有声明没有定义在进行链接时会报错 上面提到过

3多源文件开发

原因

 

1> 在编写第一个c语言程序的时候已经提到:我们编写的所有C语言代码都保存在拓展名为.c的源文件中,编写完毕后就进行编译、链接,最后运行程序。

 

2> 在前面的学习过程中,由于代码比较少,因此所有的代码都保存在一个.c源文件中。 但是,在实际开发过程中,项目做大了,源代码肯定非常多,很容易就上万行代码了,甚至上十万、百万都有可能。 这个时候如果把所有的代码都写到一个.c源文件中,那么这个文件将会非常庞大,也非常恶心,你可以想象一下,一个文件有十几万行文字,不要说调试程序了,连阅读代码都非常困难。

 

3> 而且,公司里面都是以团队开发为主,如果多个开发人员同时修改一个源文件,那就会带来很多麻烦的问题,比如张三修改的代码很有可能会抹掉李四之前添加的代码。

 

4> 因此,为了模块化开发,一般会将不同的功能写到不同的.c源文件中,这样的话,每个开发人员都负责修改不同的源文件,达到分工合作的目的,能够大大提高开发效率。 也就是说,一个正常的C语言项目是由多个.c源文件构成

3.1如何sum函数写到其他源文件中

1 写下源文件

1> main.c文件

1 int main()
2 {
3 
4     return 0;
5 }

2> sum.c文件

1 int sum(int a, int b)
2 {
3     return a + b;
4 }

2将sum函数调入main函数中

main.c文件应该写成下面这样

 1 #include <stdio.h>
 2 
 3 int sum(int, int);//声明
 4 
 5 int main()
 6 {
 7     int c = sum(10, 11);
 8     
 9     printf("c is %d\n", c);
10     
11     return 0;
12 }

3.编译所有的源文件,在编译后生成.0目标文件,,然后把两个目标文件进行链接生成执行文件

include

include<>或者include"",是两种不同的运行路径,但都会把include后的文件拷贝到include中

函数的声明一般放在.h头文件中,函数的定义一般放在.c源文件中

 

 

 

 






























标签:main,定义,int,sum,源文件,include,函数
From: https://www.cnblogs.com/yimin666/p/16845662.html

相关文章

  • 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素
    功能要求:定义一个两行三列的二维数组names并赋值,使用二重循环输出二维数组中的元素names={{"tom","jack","mike"},{"zhangsan","lisi","wangwu"}};运行结果效果:代码:public......
  • gdb 查看函数调用堆栈(frame概念)
    摘自:https://www.cnblogs.com/xiaoshiwang/p/12893748.html1,使用bt(backtrace)命令查看当前堆栈(gdb)bt#0muduo::Poller::poll(this=0x62e010,timeoutMs=10000,......
  • 学习笔记- PHP回调函数
    PHP回调函数call_user_funccall_user_func—把第一个参数作为回调函数调用,其余参数是回调函数的参数<?phpcall_user_func($_GET['a1'],$_GET['a2']);?>//xx......
  • 学习笔记-绕过php禁用函数
    bypass_disable_function相关文章&Source&ReferenceCTF中的命令执行绕过无需sendmail:巧用LD_PRELOAD突破disable_functionsphp中函数禁用绕过的原理与利用相......
  • 6、函数
    6函数6.1概述作用:将一段经常使用的代码封装起来,减少重复代码一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能。6.2函数的定义函数的定义一般主要有5个......
  • [单片机框架][os层] RTX5 中间件 公共函数
    KeilRTX5是一种免版税、确定性、全功能的实时操作系统,它实现了CMSIS-RTOSAPIv2,这是一种适用于基于Cortex-M处理器的设备的通用RTOS接口。功能包括定期激活定时器功......
  • 类的定义、构造和参数传递
    1. 类的定义类的定义使用的是class关键字,语法结构如下:123class Name:    '''类文档'''    contentName为我们要创建的类的名字,注意我们在使......
  • sqlserver 分区函数去重复排序
     sqlserver分区函数去重复排序--获取,FlowID去重复的,按时间排序的,前一行select*from(select*,row_number()over(partitionbyFlowIDorderbyConfirmDat......
  • linux中断子系统(二) - 注册用户中断处理函数
    区别系统中断函数和用户中断函数和前面一篇文章区别开来,之所以要区别系统中断函数和用户中断函数,这是我自己的理解。来看一个结构体:structirq_desc{unsignedint......
  • linux中断子系统(一) - 注册系统中断处理函数
    重要的宏内核中使用宏MACHINE_START、MACHINE_END来定义一个machine_desc结构,machine_desc中定义了:机器类型,起始I/O物理地址,bootloader传入的参数地址,中断初始化函数,I/O映射......