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总结
以上是内存溢出为你收集整理的c – 如何将功能仅限于主要功能?全部内容,希望文章能够帮你解决c – 如何将功能仅限于主要功能?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)