C中 函数声明 要在main函数之前之解决?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C中 函数声明 要在main函数之前之解决?相关的知识,希望对你有一定的参考价值。
有人说可以这样解决
c语言编译器对于源代码的编译是顺序编译的,当你的任意一个函数中调用某个函数的时候,这个函数的原型必须在调用之前声明,否则就会出现编译错误,例如:
void a(int b)
printf("%d\n", b);
int main(int argc, char *argv)
a(10);
return 0;
以上的程序就没有问题,如果两个函数的位置倒一下,就会报错,解决办法是,将函数“a”的原型在main之前声明,如:
void a(int b);
int main(int argc, char *argv)
a(10);
return 0;
void a(int b)
printf("%d\n", b);
你可以这样试试。
但是 编译时发现系统把 main函数视为子函数一部分 无法通过编译
有什么办法解决 只能把子函数先于main函数声明吗?
我的IDE是VC++ 6
出错信息有一堆啊。。。
你们也是VC++ 6.0编译啊?
就像一楼说的,首先确定你已经include <stdio.h>吧。。
错误提示一堆,那么就找其中一个有提示是在你文件里面第几行出错的那个找出来,这个才是主要的。
但是函数未声明是不可能出来一堆错误的。
然后,我要明确一下你的概念,把子函数整个写在main前面,那不叫在main前声明,那叫定义。。。
定义就是给一个变量赋值或者实现一个函数的函数体等,而声明只是说:下面的代码需要用到这个东西,不需要去实现。就像void a(int b); 这个是声明但是void a(int b)
printf("%d\n", b);
这个就是定义了。。 参考技术A 给点出错信息呀,我的codeblocks好像和正常,就是printf没定义而已! 参考技术B #include <stdio.h>
int main(int argc, char *argv)
void a(int b); //提前调用声明
a(10);
return 0;
void a(int b)
printf("%d\n", b);
C - 在 main() 结束之前/之后运行函数 [重复]
【中文标题】C - 在 main() 结束之前/之后运行函数 [重复]【英文标题】:C - run function before/after main() ended [duplicate] 【发布时间】:2013-05-05 04:41:46 【问题描述】:我有一个问题要问你。 我需要确定我是否可以在 main() 函数结束之前或之后使用某些函数。我找不到一些 C 语言的例子。 你能给我一些建议或例子吗?非常感谢。
【问题讨论】:
你在写什么平台? 你不能把代码放在main
的末尾吗?我们需要更多信息来提供真正有用的解决方案。另外,您需要 C++ 还是 C,因为在 C++ 中您可以使用构造函数和析构函数。
只需将main()
重命名为例如oldmain()
并在新的main()
中调用oldmain()
和其他需要的功能。
en.cppreference.com/w/cpp/utility/program
【参考方案1】:
如果你使用 GCC,你可以创建construtors/destructor 函数:
constructor
属性使函数在执行进入main()
之前被自动调用。同样,destructor
属性会导致函数在main()
完成或调用exit()
后自动调用。具有这些属性的函数对于初始化在程序执行期间隐式使用的数据很有用。
示例:
void __attribute__ ((constructor)) ctor() printf("1");
void __attribute__ ((destructor)) dtor() printf("3");
int main() printf("2");
输出:
123
【讨论】:
+1。这是一个例子:geeksforgeeks.org/…【参考方案2】:C 中有atexit
函数(C++ 中为std::atexit
),它注册了一个要在程序终止时调用的函数。
【讨论】:
【参考方案3】:您可以将atexit() 用于正常程序退出,使用信号处理程序(在 UNIX 中)用于异常退出。
GCC 也有构造函数和析构函数 function attributes 可以做你想做的事,不过这不是普通的 C 或 C++。
【讨论】:
【参考方案4】:这个问题有很多解决方案,其中一些已经提供:
静态 CRT 初始化/终止(静态对象析构函数 "钩") 重命名 main 并用真正的 main 包装它 用 atexit() 注册一个钩子不清楚您要做什么,甚至不清楚问题是“我可以这样做”还是“这样做是否安全”?你能澄清一下吗?
【讨论】:
以上是关于C中 函数声明 要在main函数之前之解决?的主要内容,如果未能解决你的问题,请参考以下文章
在c语言中自定义了一个函数,在main中调用时提示找不到标识符,怎么办?