gpt4 book ai didi

c - 为什么与main在同一文件中定义的函数不能从程序中的其他文件中调用?

转载 作者:行者123 更新时间:2023-11-30 18:50:48 25 4
gpt4 key购买 nike

在一个下雨的周末,我正在阅读 K. N. King 的C 编程:现代方法

在第 359 页,它说“与 main 相同的文件中可能还有其他函数,只要它们不是从程序中的其他文件调用即可。

我不知道原因,我尝试这样:

// a.h 
int sum(void);
int sub(void);

// a.c
#include <stdio.h>
#include "a.h"
#include "b.h"

int a = 0;
int b = 1;

int main(int argc, char const *argv[])
{
printf("sum = %d,\nsub = %d,\ndbl= %d\n", sum(), sub(), dbl() );
return 0;
}

int sum()
{
return ( a + b );
}

int sub()
{
return ( a - b );
}




// b.h
int dbl(void);

// b.c
#include "a.h"
#include "b.h"
int dbl()
{
return ( sum() + sub() );
}

然后我用

编译它

gcc -a.exe a.c b.c

在 cygwin。然后运行 ​​a.exe 作为

./a.exe

输出“sum = 1,sub = -1,dbl = 0”一切顺利。那么,K.N. King 先生和我谁错了?

最佳答案

引用的部分是程序设计建议。

只要函数声明对调用者可见,C 语言中就不会阻止您将函数定义放置在任何链接文件中的任何位置。

但是在应用程序设计的顶层使用特定的文件调用函数是非常糟糕的做法。良好程序设计的关键是编写自主代码模块,这些模块只执行指定的任务,并且对程序的其余部分了解得尽可能少。

让应用程序的各个部分调用其他不相关的部分是草率、困惑的,并且会导致紧密耦合。除了程序变得难以阅读和维护之外,紧密耦合还意味着整个程序中的错误会不断升级。这意味着当您在一个模块中编写错误时,您将破坏程序中完全不相关的部分。

为了防止这种情况发生,位于 main 中的函数只能是由 main 本身调用的辅助函数(如果需要这样的函数)。它们应该被声明为静态函数,以阻止程序的其他部分访问它们。

关于c - 为什么与main在同一文件中定义的函数不能从程序中的其他文件中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38989371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com