今天,我发现C和C ++之间存在差异。我将程序分为两个不同的文件,这是我的C测试:
/* in file main.c*/
#include <stdio.h>
int main()
{
int a = 3, b = 4;
int c = sum(a, b);
printf("%d\n", 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 = 4;
int c = sum(a, 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
。发生错误:error: ‘sum’ was not declared in this scope
。如果我int sum(int, int)
在文件中放入声明main.cpp
,则不会发生错误。为什么C和C ++有如此大的不同?解决问题的最佳方法是什么?
这是C ++引入的功能:除非您实际看到过声明或定义,否则不要以为您知道函数签名。使更容易在编译器和链接过程中更早地报告不正确的函数使用情况,并且使用C ++名称修饰,需要实参的确切类型才能知道代码将要针对的符号-类型确定基于与候选对象的匹配,并可以进行各种标准转换/隐式构造/隐式转换。
解决此问题的正确方法是创建sum.h
头文件:
#ifndef SUM_H
#define SUM_H
int sum(int, int);
#endif
应该将其包含在第一行中sum.cpp
(或(因此,如果sum.h
内容演变为依赖于<iostream>
内容,但忘记将其本身包含在内,则会出现错误),并且在main.cpp
其他内容包含之前或之后随便添加(我会警告大多数人会放在后面,但这是一种风格选择)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句