c与c++中函数使用的区别

我在a.c中这样写

void msg()
{
    printf("Hello\n");
}

然后在main.c中直接调用msg函数,不用加什么extern声明之类的,也不用包含a.c,直接像这样调用

 int main()
{
    msg();
    return 0;
}

不会出现问题,但是我把a.c 和main.c分别改为a.cpp和main.cpp之后,编译就会提示错误。请问这是什么原因??

7个回答

在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少量区别.下面简要介绍一下最重要的区别.
1、 在C++中,民,局部变量可以在一个程序块内在任何地方声明,在C中,局部变量必须在程序块的开始部分,即在所有"操作"语句之前声明,请注意,C99标准中取消了这种限制.
2、在C中,按如下方式声明的函数没有对函数参数进行任何说明;
int func();
也就是说,如果没有在函数后面的括孤内指定任何参数,这在C中就意味着对函数参数未做任何声明,该函数可能有参数,也可能没有参数,然而,在C++中,这样的函数声明意味着该函数没有参数,也就是说,在C++中,下面这两个函数声明具有同样的作用:
int func();
int func(void);

在C++中,参数列表中的void是任选的.许多C++程序员使用它们是为了表明函数没有任何参数的,以便于他人理解程序.但是,从技术上说,void不是必须的.

** 3、 在C++中,所有函数均必须被设计成原型,但这在C中只是一种选择.编程经验表明,在程序中也应该给函数采用原型设计方法.在C与C++之间还存在一个重要而又细微的差别,即字符常数在C中被自动作为整形来处理,但在C++中则不然.**
4、在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.
5、在C中,一个标识符可以至少31个有效的组成字符.在C++中,一个标识符的所有组成字符均是有效的.可是,从实用角度看,过长的标识符没有太大的用处,不仅不便于记忆,而且还会增加出现打字错误的可能性.
6、在C中,在程序内部调用main()函数的情形不常见,但这种做法是容许的,在C++中,这种做法是不容许的.
7、在C中,无法获得register型的地址,在C++中则可以获得这种地址.
8、在C中,如果类型声明语句中没有指定类型名,该类型被假定成int,这种隐式转型在C99与C++中是不允许的.。

这属于未定义行为。取决于哪个源代码先编译。C编译器不像C++编译器那么严格。
都需要先定义后使用

编译错误有很多,C++的要把函数的声明写在.h文件里,实现写在.cpp里

不会吧 应该说C++兼容C的啊

具体要看你的编译选项,参数等。然后就是c,cpp对于函数link时查找方式。

我试了编译没问题啊,首先cpp是c++文件,c++和c语言的头文件是不一样的,还有,当你在cpp中用到输出流的时候需要using namespace std;的名称空间说明,我用的是VC++6,.0进行编译的,用的是你的例子,编译都能通过,输出结果也一样。不过,c语言和c++也是有比较大的区别的,我是c++和c语言的爱好者,欢迎一起交流。

要c++写c的程序,前面最好加个#include。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c与c++中函数使用的区别
我在a.c中这样写 ``` void msg() { printf("Hello\n"); } ``` 然后在main.c中直接调用msg函数,不用加什么extern声明之类的,也不用包含a.c,直接像这样调用 ``` int main() { msg(); return 0; } ``` 不会出现问题,但是我把a.c 和main.c分别改为a.cpp和main.cpp之后,编译就会提示错误。请问这是什么原因??
C#调用C++动态库DLL中的函数
C#调用C++动态库DLL中的函数,此函数参数中有bool(小写)类型的参数。c#该如何进行转换
C语言主调函数与被调函数 奇怪 现象
此程序我在DEV-C++和Cfree5上运行,均无误,但是,若将test函数返回值改为void 则在DEV-C++上出现Warning,但是能运行出想要的结果,在Cfree5上会出现error ,但是之前学习的C的书中都说,被调函数置于主调函数之后,是违法的,但是为什么 test函数返回值为int可以无error呢? ``` # include<stdio.h> int main() { test(); } int test() { printf("this is a test!\n"); return 0; } ```
C语言函数的定义和函数的声明的区别在哪里,函数的定义是不是包含了申明的条件?
C语言函数的定义和函数的声明的区别在哪里,函数的定义是不是包含了申明的条件?
想用MFC实现类似c++中自定义函数及调用功能
我学了C++,就是想用MFC实现类似C++的函数功能,比如我在主函数外部定义了一个自己的函数,然后再主函数里边调用这个函数。 比如我定义了一个函数max(int a, int b)来返回a和b中最大的那个数,我在主函数里直接调用这个函数,z=max(x,y)就直接把x和y中最大那个值给z,我想用MFC来实现,但是不知道怎么弄 谢谢大佬们!
新手求解:c++中的构造函数问题求解
#include<iostream> using namespace std; class Clock { public: Clock() /* { }就是这个大括号,不加就会出错*/ void display(); void update(); void init(); private: int hour,minute,second; }; void Clock::init() { hour=minute=second=0; } void Clock::display() { cout<<hour<<"-"<<minute<<"-"<<second<<endl; } void Clock::update() { second++; if(second==60) {minute++;second=0;} if(minute==60) {hour++;minute=0;} if(hour==24) {hour=0;} } void main() { Clock c; c.init(); c.update(); c.display(); system("pause"); } public中的构造函数为什么编译出错,"public: __thiscall Clock::Clock(void)" (??0Clock@@QAE@XZ),该符号在函数 _main 中被引用。在构造函数后面加空的{}就可以通过?
关于C++的引用与函数调用问题
#关于C++的引用与函数调用问题 之前已经定义了一个函数例如求两点之间的长度 distacne(point &a,point &b); point是点类,函数形参为类的引用。 如果有point c,d可以直接distance(c,d)调用函数。 但是,定义一个返回值为point的函数c(),d()进行如下操作 distance(c(),d()),程序会出错 若返回值为point &则会成功,这是为什么??
c++中使用c的函数要不要加std,c++中使用Linux函数时要不要加上“::"
# 1.c++中使用c的函数要不要加std **比如stdio.h 与cstdio,我看网上说是将stdio.h中的函数放入了名称空间std中,那么在使用函数如printf时应该加上std::printf才对啊,但是实际上** ``` #include<cstdio> int main(void) { printf("csdn"); return 0; } ``` 与 ``` #include<cstdio> int main(void) { ::printf("csdn"); return 0; } ``` 与 ``` #include<cstdio> int main(void) { std::printf("csdn"); return 0; } ``` **都可以通过编译,这是什么原因?哪一种才是标准的写法?** ___ # 2.c++中使用Linux函数时要不要加上“::"? 如`::pthread_creat(&threadID,nullptr,threadfunciton,nullptr)`
C++ string类里面有类似C语言里sscanf和sprintf的函数吗?
C++ string类里面有类似C语言里sscanf和sprintf的函数可以用吗?或者怎么简易实现从string类读入或输出字符、字符串、整型数等等。最好是库函数,有详细举例,不要太复杂。
C++课后练习2:试分析在C++中使用递归函数的有点和缺点?
C++课后练习2:试分析在C++中使用递归函数的有点和缺点?
在C99中内联函数的使用疑问,内详。
在C89中,将内联函数放在*.h里即可,编译符合预期。 在C99中,一旦*.h出现内联函数,编译便报错:Undefined XXXX 怎么破?求解!
C/C++编程中的函数库问题
在C语言的编程上,综合各方面的利弊,如代码的可移植性,建不建议过多的使用标准函数库呢?C++呢?
c语言里面的sbrk()函数与malloc()函数的区别
c语言里面的sbrk()函数与malloc()函数的区别有哪些?最近刚看《unix环境高级编程》里面有,不懂,求大神详解,小弟多谢
c语言中使用int main,那么其他的函数必须要有返回值吗
c语言中使用int main,那么其他的函数必须要有返回值吗
如果在C中调用C#函数并获取字符串的返回值给C。
把C#的委托给C,这个可以正常,但是C想要通过这个委托拿到C#的字符串值 要怎么做? C# ``` [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate void GetStrCallback(StringBuilder str); [DllImport("...")] public extern static void SetStrCallback(GetStrCallback cb); ... public static void Handle(StringBuilder str) { str.Append("AAAAAA"); } SetStrCallback(Handle); ``` C ``` c# typedef void(__stdcall * GetStrCallback)(const char* str); GetStrCallback _getStrFunc = NULL; extern __declspec(dllexport) void SetStrCallback(GetStrCallback cb) { _getStrFunc = cb; } ... void GetCSharpStr() { char temStr[1024] = ""; _getStrFunc(temStr); // 调用C#的函数,但是temStr还是空的,咋整? } ```
关于c语言中malloc函数的问题
c语言中,在子函数中用malloc函数开辟的空间在主函数中还有效吗?
在c++中的虚函数中,虚析构函数什么时候会用到?
在c++中,虚函数很有讲究,静态函数不能为虚函数,还有构造函数也不能作为虚函数,但是析构函数却可以,这些和对象有关系,因为虚函数依赖的是对象,这里哪些可以成为虚函数到是了解,但是这个虚析构函数什么时候会被用到呢?
C语言中如何调试函数求指导
C语言中如何调试函数?按F11几步之后进入了如下图一些文件中开始逐步调试,这是怎么回事? 就是一些诸如printf.c, _file.c的文件,怎么能跳过这些,调试函数呢?
关于C语言函数参数为另一个函数地址的问题
``` #include<stdio.h> #include<vadefs.h> #include<stdlib.h> void userret(void){ printf("调用了userret,怪我咯\n"); printf("sdfa"); return; } void simple_va_fun(int i, ...) { va_list arg_ptr; int *a; int j = 0; int k = 0; int ret_num; _crt_va_start(arg_ptr, i); j = _crt_va_arg(arg_ptr, int); //_crt_va_start(arg_ptr, j); k = _crt_va_arg(arg_ptr, int); a = &i; *(a-1) = userret; printf("%d %d %d\n", i,j,k); printf("%d\n", userret); return; } void main(void){ int k; simple_va_fun(20,30,40); printf("useret函数返回成功"); } ``` 如上述代码,编译成功,运行时simple_va_fun函数成功返回到useret函数,但是useret函数返回时出现错误:执行位置 0x00000014 时发生访问冲突。初步探明:0x00000014为simple_va_fun的第一个参数20,但是不知道为什么返回地址返回到了第一个参数的值所示的地址处,求大神解答如何解决??万分感谢!!!!!
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
剑指Offer对答如流系列 - 重建二叉树
面试题6:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出图2.6所示的二叉树并输出它的头结点。二叉树结点的定义如下: class TreeNode{ int val; TreeNode l...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
立即提问