Hen*_*son 6 c python function cs50
在 C 语言中,之前编写函数声明main似乎是多余的。
我不想使用这些方法:
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
C 的方式是什么?
#include <stdio.h>
void printHello(void);
int main(void)
{
printHello();
}
void printHello(void)
{
printf("Hello World\n");
}
Run Code Online (Sandbox Code Playgroud)
环境:我正在使用一个 make 脚本,该脚本使用 clang 并在哈佛的 cs50 云 IDE 中进行附加检查。IDE 使用 c99 版本的语言设置,如果没有函数声明则无法编译。
我的测试:仅使用 clang 仍然错误相同;使用GCC实际上编译时只带有警告。
为什么海湾合作委员会有效? GCC 看到一个没有前面声明的函数调用,它假设该函数返回 int 并编译。(c99 之前的行为)
已解决:c99 定义消除了隐式类型,因此所有函数都必须在使用前声明。在 C 语言中,没有等效的 for:if __name__ == '__main__':在文件顶部写入 main() 的用途。
感谢约翰·博德的帮助;现在有意义了。
您确实需要进行前向声明(如果您想将 main 保留在文件开头),因为该代码将被编译而不是执行。当编译器逐行编译时,它在到达函数之前不会知道函数的签名。
人们习惯于在文件底层开发更重要的功能。
但是编译是如何工作的呢?
编译实际上分两步完成。
1)Gcc(或您使用的任何东西)将为您拥有的每个文件制作预编译版本。
2)它将所有这些预编译文件链接到可执行文件或库文件等...
现在您知道了这一点,您就可以理解它是如何工作的: