C-定义函数有关问题
C-定义函数问题我在写代码时,碰到这样一个问题首先:在 head.h 中定义了void open(int)但是,我在实现时
C-定义函数问题
我在写代码时,碰到这样一个问题
首先:
在 " head.h "中定义了
void open(int);
但是,我在实现时写了
void open(int sig){printf("open!");}
void open_(int sig){printf("another!");}//这地方很可能随手写错的,所以我就来验证!
此时,我写main()
#include"head.h"
union u_t{
int START;
int CLOSE;
int OTHER;
}u;
main()//就懒得什么int main()了
{
open_(u.START);//注意,这个函数不在"head.h"里
}
1、为什么显示出another!来了呢?没有报错,只有编译时警告了下说未定义open_,都为定义了还没报错,
还显示出了another!
2、貌似我没写#include<stdio.h>,怎么printf()还能运行!还输出了another,不是没添加着头么?
怎么搞的?
why!!!
菜鸟求教!!!
[解决办法]按照你的说法在gcc下面是无法编译成功的,所以你用了什么编译器?head.h和实现函数是不是在一个文件?中间都引用了哪些头文件?这些最好都写出来才能判断
[解决办法]按照C语言编译当然可以通过,C++就不行了
[解决办法]对比一下C和C++在编译和链接阶段对函数处理的不同。
[解决办法]《程序员的自我修养——链接、装载与库》
[解决办法]C 语言的类型检查不是强制性的, 如果没有看到函数的声明, 就直接忽略类型检查继续编译. 所有, 在没有 include 头文件的情况下, 你也可以调用函数, 并且还可以用错误的参数来调用函数! 所以这样其实是非常危险的.
[解决办法]void open_(int sig){printf("another!")不在"head.h"中的话,你把它写在哪儿的?
不会是主函数所在的cpp文件里面吧,这样就能显示了
[解决办法]gcc 可以使用 -Werror-implicit-function-declaration 选项.
VC 多注意下警告把, 或者开启把警告当错误的选项.
[解决办法]用vc6那烂货就别指望太多了