今天在一个问题上研究了几个小时,最终解决,问题是:在Linux C中,如果不声明函数,也是可以编译的,但是会不检查函数形参类型,假如类型错误的话,不会提示。
用简化代码重现问题:
//网络结构体
typedef struct tcp_info{
char ip[32];
char port[16];
} ModbusTcpInfo;
ModbusTcpInfo gModbusTcpInfo;
void main(int argc, char const *argv[])
{
int a=10;
char *b="123";
test(gModbusTcpInfo,b);
return;
}
void test(ModbusTcpInfo *a ,char *b)
{
printf("b=%s",b);
}
编译gcc test.c
以上代码test(gModbusTcpInfo,b);少加了一个&,但是依然能编译成功,但是运行异常,输出b是乱码
如果在main上面增加函数声明,
void test(ModbusTcpInfo *a ,char *b);
编译时就会提示
避免bug产生。