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

c – 如何将功能仅限于主要功能?

发布时间:2020-12-16 10:17:34 所属栏目:百科 来源:网络整理
导读:让我们说我有 FILE1.C: #includestdio.h#include"File2.c"void test(void){sum(1,2);}int main(void){int sum(int a,int b);test();sum(10,20);return 0;} file2.c中: int sum(int x,int y){printf("nThe Sum is %d",x+y);} 现在我的理解是test()调用sum(
让我们说我有

FILE1.C:

#include<stdio.h>
#include"File2.c"

void test(void)
{
sum(1,2);
}

int main(void)
{
int sum(int a,int b);
test();
sum(10,20);
return 0;
}

file2.c中:

int sum(int x,int y)
{
printf("nThe Sum is %d",x+y);
}

现在我的理解是test()调用sum()应该给出一个编译时错误,因为我已经/声明了sum()本地到main,我没有得到,并且程序运行良好没有任何错误.

我的主要目的是在File2.c中定义sum并使其为main()的本地,这样其他函数就无法看到这个函数sum().

我哪里错了?

解决方法

原型在编译时很有用,因为它们告诉编译器函数的签名是什么.但它们不是访问控制的手段.

你想要做的是将sum()放入与main()相同的源文件中,并赋予它静态链接.将其声明为静态意味着它只能在该.c文件中可用,因此其他源文件中的函数将无法调用它.

然后将test()移动到另一个源文件.这将让main()调用test()但不要让test()调用sum(),因为它现在位于不同的源文件中.

FILE1.C

#include <stdio.h>

/* NO! Do not #include source files. Only header files! */
/*** #include "File2.c" ***/

/* Prototypes to declare these functions. */
static int sum(int a,int b);
void test(void);

int main(void)
{
    test();
    sum(10,20);
    return 0;
}

/* "static" means this function is visible only in File1.c. No other .c file can
 * call sum(). */
static int sum(int x,int y)
{
    printf("nThe Sum is %d",x + y);
}

file2.c中

void test(void)
{
    /* Error: sum() is not available here. */
    sum(1,2);
}

顺便提一下,请注意我注释了#include“File2.c”这一行.永远不要将#include用于.c源文件,仅用于.h头文件.相反,您将分别编译两个源文件,然后将它们链接在一起以生成最终程序.

怎么做取决于你的编译器.如果您在Windows上使用像Visual C之类的IDE,那么将两个源文件添加到项目中,它将负责将它们链接在一起.在Linux上,你可以使用以下内容编译它们:

$gcc -o test File1.c File2.c
$./test

(编辑:李大同)

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

    推荐文章
      热点阅读