当前位置:首页 > 单片机 > 单片机
[导读] GCC警告选项对我们及时找出代码中BUG,改善代码品质很有帮助。听说高手们对每个警告选项都很熟悉,能灵活运用各个警告选项来分门别类地过滤代码中的BUG信息。1../SRC/libpjmacl/pjmacl_jaccmd.c:1661: 警告: derefe

 GCC警告选项对我们及时找出代码中BUG,改善代码品质很有帮助。

听说高手们对每个警告选项都很熟悉,能灵活运用各个警告选项来分门别类地过滤代码中的BUG信息。

1

../SRC/libpjmacl/pjmacl_jaccmd.c:1661: 警告: dereferencing type-punned pointer will break strict-aliasing rules

pjmacl_free((void**)&cmn_ofs_rg_p);

PjmAclComnAndOfsList_t *cmn_ofs_rg_p = NULL;

2

../SRC/libpjmacl/pjmacl_pjm.c:332: 警告: assignment from incompatible pointer type

data_p = (PjmAclPrioAddr_t *)calloc(1, sizeof(PjmAclPrioAddr_t))

uint64_t *data_p;

3

../SRC/libpjmacl/pjmacl_pjm.c:2867: 警告: no previous declaration for ‘pjmacl_get_node_pri_U’

pjmacl_get_node_pri_U如果为外部函数的话,就应该有个声明加到类似pjsd_prt.h中

4

../SRC/libpjmfep/pjmfep_exec.c:406: 警告: implicit declaration of function ‘pjmfep_evc_queue_init’

../SRC/libpjmfep/pjmfep_exec.c:406: 警告: nested extern declaration of ‘pjmfep_evc_queue_init’

‘pjmfep_evc_queue_init’函数就没有被声明过,而且如果定义文件和引用该函数文件不一样时,引用该函数的文件也没有提前用extern 声明该函数

5

../SRC/pjmd/pjmd_conff.c:1053: 警告: passing argument 1 of ‘set_rscGrpNode_type4’ discards qualifiers from pointer target type

const char *str_p,

set_rscGrpNode_type4(str_p, &rscgrp_p->group_info.nodeinfo);

static int set_rscGrpNode_type4(char* strwk, NodeRscInfo_t* info_p)

6警告选项中关注那些引用未初始化值的语句

7 变量定义时,就最好初始化一下,省得到GCC 警告信息里刷数据

8:警告信息过于严格,有些警告信息就不是BUG了。比如调用函数中实参是&aa,这时这个指针就失去了具体的类型

dereferencing type-punned pointer will break strict-aliasing rules

call_ret = cmdlib_pjmcall(PJMCMD_CMD_PADLINE, &reqbufinf, buf_num, NULL, NULL, NULL, &exitval, &retval, (char **)&padlresp_p, &respsize, &resptype, clst_p);

中的(char **)&padlresp_p 就会产生上述警告信息

而&exitval 会产生

类似passing argument 1 of 'pjmd_pjsutil_rscunit_name2id' discards qualifiers from pointer target type的警告信息提示

dereferencing type-punned pointer will break strict-aliasing rules警告信息跟优化选项-fstrict-aliasing 有关。当开启这个优化选项时,可能优化会导致源代码中部分语句缺失,而造成系统工作不正常,所以就所有的违反strict-aliasing rules原则的地方加了条这个警告信息,提醒读者检查这个地方的代码,看看是不是如果优化后会导致部分语句工作不正常

同时这个信息提示还有另外一个目的,两个不同类型的指针指向同一个地址时,极有可能会导致代码编写出错(比如犯大小端的错误,还有地址字节对齐的错误),所以这个警告信息还有这一层的目的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

如果你是在Linux下做开发,你就必须知道Makefile是什么东西,如果不知道那就可以说你不是一个合格的Linux开发工程师,因为Makefile是必备的一项技能。那么,Makefile到底有什么作用呢?首先,gcc大...

关键字: Linux Makefile gcc

众所周知,LLVM的Clang C / C ++编译器比GCC提供更快的编译速度。 但是,新版本的GCC中的编译速度有所提高。

关键字: gcc Linux llvm

最近发布的 GCC 10 编译器已对 C++20 的主要功能协程(Co-Routines)进行了初始支持,但是除非显式地开启该选项,否则并不会启用此功能。当 GCC 10 在 C++20 模式(std

关键字: gcc

对于c编译器,大家应早已熟悉。往期文章中,小编带来诸多c编译器相关文章,尤其是gcc c编译器。本文中,小编将对gcc c编译器如何编译c程序予以介绍,并在文章的后半部分向大家讲解如果选择pic单片机的c编译器。如果你对...

关键字: c编译器 gcc pic 指数

c编译器的重要性不言而喻,从往期c编译器文章中,如c编译器优化、选定c编译器等,想必大家对c编译器均已有所了解。往期文章中,小编主要从宏观方面为大家讲解c编译器,此外对于gcc c编译器的讲解也大多基于windows。本...

关键字: c编译器 gcc Linux

c编译器是编译c程序的必备工具,缺少c编译器情形下,c程序以及c++程序将无法运行。对于c编译器,主要有3款。本文对于c编译器的讲解基于gcc c编译器。此外,本文的gcc c编译器为上篇文章的补充。如果你对本文内容存在...

关键字: c编译器 gcc ubuntu

c编译器很多,每款c编译器均有其特点。本文对于c编译器的讲解基于gcc c编译器,针对gcc c编译器,小编曾带来诸多文章,但大多基于windows平台。本文中,将基于ubuntu讲解gcc c编译器。此外,本文只为该教...

关键字: c编译器 gcc ubuntu

对于c编译器,大家并不陌生。小编前期同样为c编译器带来了诸多好文,如果你对c编译器感兴趣,不妨在本网站内进行搜索哦。

关键字: c编译器 gcc 静态库

自学c编译器的朋友都知道。c编译器作为常用软件之一,并非具备无法逾越难度。对于c编译器的学习,往往需要具备一定耐心。本文对c编译器的讲解基于gcc c编译器,同时本文承接“c编译器so easy,gcc c编译器生成、使...

关键字: c编译器 gcc 静态库

程序开发人员大多接触过c编译器,请注意,不要将c编译器和编辑器弄混淆哦。本文对c编译器的讲解,同样基于gcc c编译器,本文主要目的在于对linux环境下gcc c编译器生成和使用静态库和动态库予以介绍。

关键字: c编译器 gcc 静态库
关闭
关闭