gcc编译器各种warning 解决方式

如何查看编译器提示存在非标准代码?如何知道当前编译器默认C/C++标准是多少?GCC有提供命令查看编译器基本配置吗?编译警告和错误?Clang也兼容MSVC?编译器如何把warning当做error? 摘要:本文介绍了查看编译器配置和标准的方法,包括GCC的-pedantic选项检测非标准代码,以及-dM-E参数获取默认C/C++标准版本。文章还对比了不同语言的编译警告处理方式,如MSVC和C#的警告禁用方法,并提到Clang对GCC和MSVC的兼容性。最后讲解了如何将编译器警告视为错误,以及使用#warning和#error进行提示。内容涵盖GCC、Clang、MSVC等多编译器技巧,适合开发者优化编译过程。 阅读详情

warning: implicit declaration of function 'xxx'(函数的隐式说明)

   今天在移植gnu-ucos的时候出现一个问题----warning: implicit declaration of function 'OSCtxSw' 

      经过在网上搜索发现主要有两种情况会产生这种问题:

1)没有把函数所在的c文件生成.o 目标文件。

2)在函数所在的c文件中定义了,但是没有在与之相关的.h 文件中声明。

    这里是第二种情况,但又不全是。通过分析查看发现函数OSCtxSw是在 os_cpu_s.s里面实现的。在这个文件里面还有其它靠汇编实现的函数。在这里需要加一个头文件对这个函数的声明。

    在include 目录下增加一个文件 os_cpu_s.h ,里面加入汇编语言文件实现的函数声明

void  OSCtxSw(void);
再次编译没有 warning。 通过



suggest parentheses around arithmetic in operand of '|'

    用gcc编译程序遇到如下问题:

warning: suggest parentheses around arithmetic in operand of '|'
//GPG4 is setted as LCD_PWREN
    rGPGUP=rGPGUP&(~(1<<4))|(1<<4); // Pull-up disable
提示建议用括号扩住 '|' 运算,修改为如下形式即可:

//GPG4 is setted as LCD_PWREN
    rGPGUP= (rGPGUP&(~(1<<4))) | (1<<4); // Pull-up disable



warning: control reaches end of non-void function

出现这个警告说明 某个函数没有return 一个数值。 而这个函数的返回是非void的.比如说

int add()
{
	///aaa
	///bbb
}
函数返回一个int类型,在函数体内部却没有返回。



warning: function declaration isn't a prototype

    如果一个函数没有参数,int hello_init(void)  括号里面没有加void就会出现此警告。 注意这个void 无论在函数声明还是定义的时候都要加上!












【解决】Keil中创建工程时出现-arm_math.h(xxx): warning: #xxxx-D: unrecognized GCC pragma错误 【代码】【解决】Keil中创建工程时出现-arm_math.h(xxx): warning: #xxxx-D: unrecognized GCC pragma错误。 阅读详情

相关推荐

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

suggest parentheses around arithmetic in operand of '|'

在向linux下gcc移植ucos的时候遇到如下问题: [plain] view plaincopyprint? warning: suggest parentheses around arithmetic in operand of '|'   [cpp] view plaincopyprint? //GPG4 is setted as L

xiaominthere的专栏 8054

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1194

C语言编译常见警告

declared implicitly 隐式声明 subscript out of range 下标超出范围 argument of type "UINT8 *" is incompatible with parameter of type "const char *" 类型为“UINT8*”的参数与类型为“const char*”的参数不兼容 expression must be a modifiable lvalue 表达式必须是可修改的左值 st...

m0_50668851的博客 1万+

可调电源的电路设计

可调电源在电路调试中经常用到,可调电源分为两种2-5v(非0点可调)和0-5v(低至0点可调)可调两种。 对于第一种非0点电压的可调范围,其主要是由于开关电源或LDO芯片输出的最小电压为一个固定电压值,非0范围。因此通过调节开关电源或LDO端的反馈电阻的设计模型,其电压可调范围都与芯片的参考电压有关。 基于开关电源的可调电压设计电路 因芯片U2的输出参考电压VSENSE管脚为1.22v。因此,通过调节可调电阻R8的数值,其芯片输出的最低电压一定不小于1.22v。当然此种方案是手动可调输出电压的设计,如

weixin_42257266的博客 9731

kubedns-coredns部署pod出现not ready问题

文章目录遇到的问题1、发现问题2、排查问题3、解决方法 coredns的实例health_check不通过的问题,排查和解决方法 遇到的问题 1、发现问题 pod启动但是未ready 查看是readiness失败 使用对应的URL进行curl,发现真的返回503 2、排查问题 查看错误日志,发现一堆这个错误"waiting on : kubernetes" 网上相关的问题解答 这个跟测试场景不一样,这个案例是开了防火墙,可以确认我这个案例的机器没有开防火墙,但它提醒了一点,coredns是需要访问ap

u012533481的博客 2844

suggest parentheses around comparison in operand of &|

warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses] 该警告希望你在&(逻辑与)表达式左右加上括号。有的时候&&(逻辑且)少写了一个&,也会产生该警告。 例如:if((a[2]>>1)&0x1 == 1){ ...

weixin_30301449的博客 1083

Apollo Planning决策规划算法代码详细解析 (2):Scenario执行

上一章节讲Scenario的决策逻辑,当确认当前Scenario后,本章节继续深入讲解在代码中,Scenario的执行过程。Scenario的Process()函数根据配置文件顺序执行stage,并判断目前处于哪个stage。当确认好stage后调用该stage对应的Process()函数,来进行具体的规划任务。 码字不易,喜欢的朋友们麻烦点个关注与赞。 在本文你将学到下面这些内容: Scenario的Process()函数的作用于调用方式; Scenario对象的初始化方法; 如何给每个Scen

自动驾驶Player的博客 5608

GCC编译C语言常见错误和警告汇总

1.suggest parentheses around comparison in operand of '&' [-Wparentheses] 建议在'&'的操作数比较周围加上括号 报错语句 while(HWREG(PRCM_BASE_ADDR3 + CM_PER_SPI0_CLKCTRL) & CM_PER_SPI0_CLKCTRL_IDLEST!= CM_PER_SPI0_CLKCTRL_IDLEST_FUNC); 解决这个问题就是在......

嵌入式开发及工业通信 7229

Obsidian与RAG:知识管理的未来之战

摘要: 本文对比了传统RAG、Obsidian和llm-wiki-skill三种知识管理方案。传统RAG依赖查询时临时检索,知识无法积累;Obsidian需人工整理,成本高但结构化强;llm-wiki-skill通过AI在摄入时自动编译知识为结构化Wiki,实现持续增值。核心差异在于知识处理时机——llm-wiki-skill将"查询时检索"转变为"摄入时编译",通过三层Markdown结构(sources/concepts/entities)和自动双向链接构建可进化

ZhangJiqun&191cm&85kg 617

Sigrity OptimizePI Best Capacitor Location Estimation模式如何评估电容最佳位置操作指导

Sigrity OptimizePI Best Capacitor Location Estimation模式用于前仿真分析,评估电容的最佳位置以获得最小回路电感,如何分析,以下图为例进行说明。IC devices,输入U*, A*, B*, Q*, P*,将所有这些字母开头的器件都识别为IC。Min设置为1(最少电容个数为1),max设置为28(最多电容个数为28)Capacitors 输入C*,将所有C开头的器件都识别为电容。Grid X设置为8,Grid Y也设置为8。

weixin_54787054的博客 382

linux避免重复编译,c++ - 在gcc linux中编译时发生的一堆错误和警告[重复] - 堆栈内存溢出...

这段代码过去几个月前都没有错误地进行编译。 我丢失了VM映像,因此使用新的GCC和库安装了新的Linux VM。 但是现在我得到了这些错误和警告。In file included from /opt/Espressif/ESP8266_SDK/include/ets_sys.h:12:0,from include/espmissingincludes.h:4,from driver/i2c.c...

weixin_39526741的博客 741

开发simulink 以及stm32半物理仿真碰到的问题,以及处理方法,Error:External Mode Open Protocol Connect command failed(实测有用)

串口实现的,但是在测试的时候发现,这个串口可以正常发送和接收数据,但是一旦把这个串口只让其进行版物理仿真就报错。直接刷写程序是可以的,最后查到问题了。我要实现半物理仿真,就是通过matlab实现可以直接控制stm32板子,实际上是通过xcp on。然后点击simulink上的观测按钮就可以直接和stm32平台进行通讯了。3,还是使用串口3,但是重新需要设置一下com口,因为重新插拔了一下,按照这个设置方法就可以。2,重新加载ioc文件。

pvmsmfchcs的博客 1499

GCC编译器使用入门

GNU是一个开源的组织,其最杰出的软件之一是GCCGCCgccg++下,b站上也有资源)

Free Software 1024

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux gcc忽略警告,gcc 禁止warning

gcc 禁止warning熟悉windows编程的人都知道,禁止编译器输出某个warning,在代码中可以这样#pragma warning( disable 号码)例如#pragma warning(disable 4096)这里的4096是warning的号码,在gcc中warning是直接使用名字代表,而不是数字,例如 未使用的变量的 warning就是-Wunused-variablegc...

weixin_29802189的博客 3677

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【树莓派开发】gcc编译器中出现warning: #pragma once in main file

众所周知,#pragma once语句是防止头文件重复包含非常常用的一条语句 VS编译器在创建.h文件的时候会自动帮你在开头添加这个语句 但是在gcc编译器下,这个语句就可能会出现一些问题 所使用编译器: VS2019(windows10) 树莓派(linux-gcc) warning: #pragma once in main file 在我尝试在linux环境下使用#pragma once语句时,遇到了这个报错 解决这个问题的办法很简单,就是不要编译头文件 编译器会自动展开头文件,无需手动编

慕雪华年的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【总结】【更新】gcc/g++ 编译命令小总结(关于warning信息)| CGUZ

编译器真是一个让人又爱又恨的东西呢.. 但是如果把编译器用得恰到好处的话,它对coding的益处将是巨大的。 充足而不多余的 warning 信息能够**消除大部分 bug 产生的可能性、帮助 debug 以及帮助培养更好的编程习惯**。 所以大家千万不要无视 warning

Keyu Tian's blog 1018

GCC 使用指南(gcc 9.4 compiling、warning 解决办法)

背景 最近项目需要使用 Ubuntu 20.04.4,查看下 编译器版本居然是 9.4.0,自然项目迁移过程中会有很多编译问题需要解决,毕竟之前的 gcc 版本都是 4.8.5的,差距很大。 使用 gcc(g++) 遇到编译问题,首选当然是浏览器直接搜索问题关键字即可,一般都是有解决办法的,但是碰到和高版本如:gcc 8.4、gcc 9.4版本的问题,很多时候就不太好找的。因此就需要自己去 GCC官网 针对具体问题具体查看了。 附 Ubuntu 下载直达链接:Ubuntu Server 20.04.4 LT

lm_hao的专栏 6887

gcc消除编译时的warning

6.61.11 Diagnostic Pragmas GCC allows the user to selectively enable or disable certain types of diagnostics, and change the kind of the diagnostic. For example, a project’s policy might require that...

llwodao的专栏 3318

c++编译时打开warning-as-error,并在特定情况下关闭某些warning检查

为提升c++代码质量,将所有warning当作error处理,可有效提升代码质量。在cmake中开启的方式如下: 其中,打开大部分warning,打开一些特定需求。前者不包含后者。关闭warning有相应语法如下: gcc关闭“有无符号数据对比”检查的warning (即sign-compare) clang关闭“有无符号数据对比”检查的warning (即sign-compare) 使用宏关闭特定warning (gcc / clang) 定义关闭warning的宏(gcc / clang) 使用关闭w

LaineGates的专栏 7845

GCC编译WARNING解决:"extra tokens at end of #ifndef directive" tags: GCC,WARNING

近日,检查项目中的所有的WARNING,发现了一个有趣的WARNING: “extra tokens at end of #ifndef directive”。从字面上来看是&amp;amp;quot;在#ifndef后面有无效的指令&amp;amp;quot;。私下里写了小程序验证,发现有两种情况可以产生这个WARNING。 程序1: // directive_1.c #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;

kao2406的博客 2万+

gcc 关闭warning警告

-w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。 -Wall选项意思是编译后显示所有警告。 -W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。 在编译一些项目的时候可以-W和-Wall选项一起使用。

4万+

gcc编译器常识

在Linux操作系统中,编写C/C++的代码时经常需要使用gcc这款强大的编译器。 gcc是GNU C Compiler的意思,经过多年的发展,从一开始只支持C语言的编译到了今天可以支持数种编程语言的编译,包括C++、Java、Objective-C、Pascal语言等等,其功能已经从GNU C Compiler 变成了 GNU Compiler Collection。

chenjx 798

Ubuntu安装gcc编译器及遇到问题解决

在Ubuntu中编译、安装 gcc4.1.1 过程以及遇到的问题首先简单介绍一下:GCC是GUN工具链中的编译开发工具,它可以把源程序编译成为可执行文件(gcc编译C语言程序;g++编译C++语言程 序;gcj编译Java语言程序……)。例如:使用gcc由C语言源代码文件生成可执

1万+

msvc/gcc:中用#pragma指令关闭特定警告(warning)

在使用一些第三方库或源码的时候,经常会遇到编译时产生warnings情况,这些warning不是我们自己的代码产生的,当然也不好去修改,但每次编译都显示一大堆与自己代码无关的警告也着实看着不爽,而且还有可能造成自己代码中产生的警告被淹没在多过的无关警告中,而被忽略掉的情况。 所以要想办法关闭这些第三方代码和库产生的警告。 关闭特定的warning可以在编译时通过命令行参数的方式指定,比如 gcc

10km的专栏 1万+
上一篇: Volatile相关知识
下一篇: cgroup--内存 限制内存测试
xianjian_x
博客等级 码龄14年 231粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值