c语言错误笔记
1、error: expected ‘;’, ‘,’ or ‘)’ before ‘switch’
原因:switch 是关键字,不能被声明成一个变量
2、一个结构体变量在一个目标文件与在另外一个目标文件中的字段不同,如下图所示:
原因:修改该结构体后,一个目标文件的代码改动了会重新编译,其中结构体是更新后的;而另外一个目标文件的代码没有改动,导致该目标文件没有重新编译而里面的结构体还是旧的结构体。所以在运行时,在两个不同目标文件中其结构体的字段不同。
3、有些项目可能没有把头文件添加到Makefile的依赖关系中,所以修改了头文件后,需要把相关的目标文件删除,并重新编译。否则修改的头文件的内容不会被编译。
4、当宏定义有多行时,注意最后一行不要加续行符\ ,否则会把后边的代码加到当前宏定义中,造成编译时发生奇怪的错误。 此外,\后面紧跟换行,中间不能有其它空白字符。
5、在err标号前一定要有正常返回的流程。如下图所示,当程序正常退出时,要从err标号上面的return语句返回,否则创建的list都会被释放而变成野指针。
6、free指针p指向的对象后,该指针p仍然指向原来的位置,p并不为NULL。
7、warning: passing argument 4 of ‘tos_nproxy_waf_profile_create’ makes pointer from integer without a cast [enabled by default]
函数tos_nproxy_waf_profile_create的第4个参数需要指针,但传递的是int型数据。
8、 Node *root = getNode(root, prefix, 0); 该语句会先声明一个局部变量root,然后覆盖全局变量root 并作为参数传给getNode函数, 而局部变量root没有被初始化,导致getNode函数中对root的访问都是未定义的。