GCC编译
编译warning
1. warning: variable ‘row_pointers’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]
- 涉及
jmp
状态切换,需要保存当前函数中的变量,而局部变量可能会被覆盖 - FIX:
- a. 变量加
volatile
- b. 变量加
static
将保存在栈区的变量,换成保存在静态区(也可以将变量变成全局变量),这样在状态切换后该变量也不会存在被修改的情况
- a. 变量加
2. warning: array subscript 2 is above array bounds of ‘void *[2]’ [-Warray-bounds]
code
:#define OVER_FLOW_CHECK(INDEX, MAX) \ if ((INDEX) > (MAX)) {\ RULE_ERRF("%s() %d Index = %d, Max = %d", __func__, __LINE__, (INDEX), (MAX)); } static void _NNMDProc(int Index, uint64 *ParamStatus, PARAM_s *pParam) { ..... pField[0] = &Data.sensitivity; OVER_FLOW_CHECK(Index, (int32)GetArraySize(NNMotionDetection) - 1); //warning ituner_param_proc(pParam, pField[Index]); ..... }
- 代码中的功能函数已经使用了
OVER_FLOW_CHECK
进行overflow
的check,但是编译器还是有warning产生,最主要原因是OVER_FLOW_CHECK
没有退出,就算检查到超过要求值只会有打印还是会出现数组下标越限访问访问。 - FIX: 增加退出
#define OVER_FLOW_CHECK(INDEX, MAX) \ if ((INDEX) > (MAX)) {\ RULE_ERRF("%s() %d Index = %d, Max = %d", __func__, __LINE__, (INDEX), (MAX));\ return;\ }
3. warning: missing initializer for field ‘min_argc’ of ‘const struct chide_command_info’ [-Wmissing-field-initializers]
- 这段warning的含义是 在使用
struct chide_command_info
时存在一个未初始化的变量 - 检查代码:发现结构体数组中最后一项未完全初始化(
只初始化了两项
)struct command_info { const char *command; int (*func)(int argc, const char *const *argv); int min_argc; }; static const struct command_info command_list[] = { {"sleep", sleep, 1}, {"diff", diff, 2}, {NULL, NULL} };
- FIX: 初始化补充完整
static const struct command_info command_list[] = { {"sleep", sleep, 1}, {"diff", diff, 2}, {NULL, NULL, 0} };
4. make[6]: Warning: File 'drivers/gpu/drm/omapdrm/displays/built-in.a' has modification time 0.00012 s in the future
- 本地修改了代码在和服务器端代码同步时存在时间差,服务器端系统时间迟了
- FIX:修改服务器端系统时间即可