c – 如何将功能仅限于主要功能?
让我们说我有
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |