[C]gcc编译常见warning

GCC编译

编译warning

1. warning: variable ‘row_pointers’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Wclobbered]

  • 涉及jmp状态切换,需要保存当前函数中的变量,而局部变量可能会被覆盖
  • FIX
    • a. 变量加volatile
    • b. 变量加static 将保存在栈区的变量,换成保存在静态区(也可以将变量变成全局变量),这样在状态切换后该变量也不会存在被修改的情况

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, NULL0}
    	};
    

4. make[6]: Warning: File 'drivers/gpu/drm/omapdrm/displays/built-in.a' has modification time 0.00012 s in the future

  • 本地修改了代码在和服务器端代码同步时存在时间差,服务器端系统时间迟了
  • FIX:修改服务器端系统时间即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值