加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

“在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之前或之后另一个包括你喜欢的(我担心大多数人会追求,但这是一个风格的选择).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读