c语言多个子函数声明,C函数在多个源文件中的声明和定义
这是src1.c的内容:
#include
extern int w;
//int go(char); // no need to declare here. WHY????
main(){
char a='f';
go(a);
printf("%d\n", w);
}
这是src2.c的内容:
#include
int w = 99;
int go(char t){
printf("%c\n%d\n",t,sizeof(t));
}
为什么在Linux中编译后,在src1.c文件中声明go函数是不是必须?
cc src1.c src2.c;
编译器是否将src2.c文件中的go函数定义放在main函数的代码上面,这样就不需要声明了?
我这样做:
#include
int go(char); // need to declare here, because if not, arguments of go will be promoted to intS and they would conflict with char parameters defined in go. Error is droped!
main(){
char a='f';
go(a);
}
int go(char t){
printf("%c\n%d\n",t,sizeof(t));
}
所以每个人都说,在没有原型的情况下传递任何数量和类型的参数是错误的.在这种情况下,它们被提升为整数,但必须同意定义中指定的那些.
我做了一些测试,发现即使它编译没有错误它也无法正常工作.
SRC1:
#include
int go(int t){
printf("%d\n%d\n",t,sizeof(t));
}
sr2.c:
#include
int go(int); //if I omit this prototype, program outputs 1 which is far from correct answer :)
main(){
double b=33453.834;
go(b);
}
所以最后答案只能是未定义的行为.
谢谢Maxim Skurydin
c语言多个子函数声明,C函数在多个源文件中的声明和定义相关推荐
- 一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件
在一个java源文件中可以声明多个class. 但是,只能最多有一个类声明为public的. 而且要求声明为public的类的类名必须与源文件名相同. 编译的过程 编译以后,会生成一个或多个字节码文件 ...
- mysql函数临时表_MySQL函数中创建临时表
我们都知道,在MySQL创建函数的时候,是不能返回table类型的数据的. 我有几个疑问: 1.在function中我首先创建一个临时表: create temporary table table_t ...
- 【C语言进阶深度学习记录】三十八 C/C++语言中的函数声明与函数定义
文章目录 1 函数的声明和定义 1.1 代码分析 2 总结 1 函数的声明和定义 声明的意义在于告诉编译器程序单元的存在.只是告诉编译器它存在但是不在声明这里定义,有可能在当前文件中的其他地方或者其他 ...
- c语言中声明外部函数需要添加的关键字,C语言中声明和定义的区别——分析extern关键词。...
一直很迷惑C语言中的声明和定义的有些实践中的用法,说迷惑实践是因为声明和定义的概念上的区别是很明确的. 定义和声明的区别(主要针对变量): 定义是要为变量分配存储空间,还可以在定义的时候为变量指定初始 ...
- 脚本语言【JavaScript基础】JavaScript函数:声明+调用
文章目录 在javaScript脚本语言当中:函数使用也是分为两部分:声明+调用 数组 在javaScript脚本语言当中:函数使用也是分为两部分:声明+调用 函数在JS当中声明方式有两种 关键字fu ...
- c语言goout函数,Go语言函数声明(函数定义)
函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列表.返回值.函数体和返回语句,每一个程序都包含很多的函数,函数是基本的代码块. 因为Go语言是编译型语言, ...
- 【C语言】函数的声明_函数定义_函数调用_函数递归 [函数的基本使用]
文章目录 前言 1.函数是什么? 2.C语言中函数的分类 2.1 库函数 2.2 自定义函数 3.函数的参数 3.1 实际参数(实参): 3.2 形式参数(形参): 4.函数的调用 4.1 传值调用 ...
- c语言函数调用必须声明void,函数声明-czysocket_dara-ChinaUnix博客
看了C陷阱与缺陷,第一个给我震撼的就是理解函数声明了,下面是我的理解. 1.理解函数声明 为了模拟开机启动时的情形,我们必须设计出一个C语句,以显示调用位于地址0的子例程.调用语句如下: (*(voi ...
- C语言函数声明以及函数原型
C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错.但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明. 函数声明(Declaration),就是告诉编译器 ...
最新文章
- Oracle 中的SID是什么意思?有什么作用?
- 线程与进程的控制原语对比
- Dom对象、JavaScript对象、jQuery对象区别
- 6.过滤器(Filter)
- D-Wave的量子计算机,到底能不能进行量子计算?
- 语音识别(1)---语音识别(ASR)评估指标-WER(字错误率)和SER(句错误率)
- java word转pdf_java里实现Word转PDF的几种方案
- BiLSTM+CRF医学病例命名实体识别项目
- CCF201503-5 最小花费(100分解题链接)
- LeetCode 101. Symmetric Tree
- Android 学习之逐帧动画(Frame)
- 现代通信理论与新技术 - 填空自测
- 使用sort(function(a,b){return a-b})对数组进行排序的原理
- ST7920 12864液晶图片取模,显示你想显示的图片。
- 百度HI QQ和MSN 阿里旺旺贸易通MSN在线客服聊天代码
- Navicat Premium 12 中文版v12.1.19
- 使用Visio画UML模型
- 决策树CART、ID3、C4.5原理梳理
- 关于小区物业自治方案的探讨
- JavaScript 入门
热门文章
- LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)
- Ubuntu Linux系统下搭建自己的Web服务器
- 猪八戒背媳妇用计算机弹出来,猪八戒背媳妇?杭城游泳馆爆笑一幕:浙大学霸果然机智!...
- 蛤蟆 Oracle,47.蛤蟆笔记go——go连接Oracle
- bigdecimal 保留两位小数_一起聊聊小数的储存和运算
- 李宏毅机器学习(五)Transformer
- 禁术级竞赛刷分技巧:找到跟测试集最接近的有标签样本
- Spring Boot中使用Redis数据库
- Spring Boot中使用@Scheduled创建定时任务
- RestQL:现代化的 API 开发方式