“在C和C中未在此范围内声明变量”
发布时间:2020-12-16 09:57:01 所属栏目:百科 来源:网络整理
导读:我今天发现C和C之间存在差异. 我把程序分成两个不同的文件,这是我的C测试: /* in file main.c*/#include stdio.hint main(){ int a = 3,b = 4; int c = sum(a,b); printf("%dn",c);} 和 /* In file sum.c */#include stdio.hint sum(int x,int y){ return
我今天发现C和C之间存在差异.
我把程序分成两个不同的文件,这是我的C测试: /* in file main.c*/ #include <stdio.h> int main() { int a = 3,b = 4; int c = sum(a,b); printf("%dn",c); } 和 /* In file sum.c */ #include <stdio.h> int sum(int x,int y) { return x + y; } 然后,我编译了gcc main.c sum.c,没有错误,结果是正确的.以下是我的C测试,我还将它们分成两个不同的文件: /* in file main.cpp*/ #include <iostream> int main() { int a = 3,b); std::cout << c << std::endl; } 和 /* In file sum.cpp */ #include <iostream> int sum(int x,int y) { return x + y; } 编译它们g main.cpp sum.cpp.发生错误:错误:未在此范围内声明’sum’.如果我在main.cpp文件中放入一个声明int sum(int,int),则不会发生错误.为什么C和C之间有这么不同?什么是解决它的最佳方法? 解决方法
这是C引入的一个特性:除非你真的看过声明或定义,否则不要假设你知道一个函数签名.在编译器和文件中更容易报告不正确的函数使用情况.链接过程,并且使用C名称修改,需要确切的参数类型来知道代码需要链接的符号 – 类型确定基于与候选者的匹配,具有各种标准转换/隐式构造/隐式转换可能.
解决这个问题的正确方法是创建一个sum.h头文件: #ifndef SUM_H #define SUM_H int sum(int,int); #endif 这应该包含在第一行或sum.cpp中(如果sum.h内容演变为依赖于< iostream>内容但忘记将其自身包含在内),则会出现错误,并且在main.cpp之前或之后另一个包括你喜欢的(我担心大多数人会追求,但这是一个风格的选择). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLite中的表达式
- 【DM】设计模式再回顾---职责单一+开放-封闭
- ruby-on-rails – 如何自动将Heroku pgbackup发送到S3
- Ruby 2.4.1 Dir.children(dirname)为Dir返回“未定义的方法
- ruby-on-rails – 如何使用rest-client gem发送标头和cooki
- 正则表达式判断电话号码
- 依赖注入 – ASP.NET MVC 3 RC中的MvcServiceLocator在哪里
- ruby-on-rails – Nokogiri – 用正则表达式获得div级别
- react-native – 默认使用React Native打开iOS iPad模拟器
- FMDB的使用