c语言编译错误 原文,C语言常见错误与警告

C语言常见错误与警告

C语言常见错误与警告C语言常见错误:

1 invalid type argument of ‘->’ (have ‘struct qstr_xid_element’)

这种错误一般是没有理解C中“->”与“.”用法的不同,“->”是指向结构体指针获取结构体的成员变量时所用,而“.”则是一般的结构体名获取结构体的成员变量时所用。简单来说,如果符号前是指针类型,那么用“->”,否则用“.”

2 make: *** /lib/modules/2.6.32-431.el6.x86_64/build/: No such file or directory.  Stop

原因:系统没有安装内核开发包,在上述所示的路径中查找build文件,发现没有此文件或者文件链接失效,然后到/usr/src/kernels/中查看是否有对应的开发包

解决办法:1 yum install kernel-devel-$(uname -r)

2 如果找不到yum源,那么可以直接从网上下载对应的内核开发包,放入/usr/src/kernels/中,并rpm -i kernel-devel-xxx.rpm。如果内核版本不同,需要重新做一个链接,首先删除错误链接:rm build;然后查看当前内核版本:uname -r;新建一个链接:ln -s /usr/src/kernels/3.10.0-327.2.e17.x86_64/build

3 Error downloading packages:

解决办法:执行yum clean all 清除缓存目录下的软件包及旧的headers;然后重新yum install

参考:http://wenzhongxiang.blog..com/6370734/1434577 点击打开链接

4 您可以尝试添加 –skip-broken 选项来解决该问题

** 发现 19 个已存在的 RPM 数据库问题, ‘yum check’ 输出如下

解决办法:1 package-cleanup --cleandupes

2 yum install XXX

如果发现需要安装的包的版本低于安装的版本:yum makecache

5 如果出现 致命错误:scsi/sg.h:没有那个文件或目录

此文件是Linux内核中的头文件,在/usr/include中的对应路径下确实没有找到此文件,但是在/usr/src/kernels/3.10.0-123.el7.x86_64/include的目录下又找到了此文件

解决办法:从/usr/src/kernels/3.10.0-123.el7.x86_64/include中将所需的文件拷到/usr/include中的对应路径下,这里可能导致又会出现其他依赖的头文件找不到,只能继续拷贝了。也许有其他办法,不过我只能找到这个笨办法

参考:http://blog..net/ysdaniel/article/details/7043381点击打开链接

此处可能会有帮助http://www.phpfans.net/ask/linux1/3585236355.html点击打开链接

6 在gdb的工程中,调试时的代码执行时乱序的

原因:这是由于代码在编译阶段经过了编译器的优化导致

解决办法:关闭优化选项即可。只要将Makefile(或者执行命令)中的CFLAGS += -O(-O2 -O3)去掉即可

7 variable ‘XXX’ has initializer but incomplete type

原因:一般都是头文件的问题,看看头文件是否引用正确

在一个项目的MT测试过程中,我们需要通过gdb调试来确认代码的正确性。然而在gdb调试过程中,我们发现程序在运行时内存实际的访问顺序与代码的编写顺序并不一致(内存的乱序访问),究其原因,是为了提高程序的运行效率。一般有两种情况:

1 代码在编译阶段经过编译器的优化而导致内存乱序访问(如使用优化选项O2或者O3编译代码)

为了解决此问题,Linux 内核提供函数 barrier() 用于让编译器保证其之前的内存访问先于其之后的完成。

2 多 CPU 间交互引起内存乱序访问,运行时,乱序处理器(Out-of-order processors)处理指令通常有以下几步:

指令获取

指令被分发到指令队列

指令在指令队列中等待,直到输入操作对象可用(一旦输入操作对象可用,指令就可以离开队列,即便更早的指令未被执行)

指令被分配到适当的功能单元并执行

执行结果被放入队列(而不立即写入寄存器堆)

只有所有更早请求执行的指令的执行结果被写入寄存器堆后,指令执行的结果才被写入寄存器堆(执行结果重排序,让执行看起来是有序的)

乱序执行相比有序执行能够避免等待不可用的操作对象(有序执行的第二步)从而提高了效率。现代的机器上,处理器运行的速度比内存快很多,有序处理器花在等待可用数据的时间里已经可以处理大量指令了

8 do{...}while(0)的作用

作用1:定义宏,实现局部作用域。我们知道宏是简单粗暴的替换,如果在if...else...的上下文中使用宏,而宏定义了多条语句,那么此宏的多条语句可能需要用{}括起来,根据不同情况可能需要加上或者不加分号(;),那么怎么统一呢,这时就用到do{...}while(0)

作用2:替代goto。我们是不倡导使用goto语句的,用do{...}while(0)在某些情况下是可以替代goto

9 collect2: error: ld returned 1 exit status

解决:这里我出现的原因是函数在声明时没有实现,即使是空实现{}也是要加上的

10 error: invalid storage class for function ‘XXX'

原因:我出现这种情况的原因是代码中少了一个‘}’

11  error: too many arguments to function ‘pthread_create’

pthread_create(&tid,&attr,&func,(void)arg)只能传递一个参数给func,要是要传一个以上的参数,请定义成结构体形式。

12  undefined reference to `pthread_create'

在linux上执行gcc thread.c,  结果出现编译错误undefined reference to 'pthread_create'。由于pthread库不是标准linux库, 所以出错。 改为gcc thread.c -lpthread 即可。

13  加载内核模块的错误:insmod: ERROR: could not insert module xxx.ko: Unkown symbol in module

原因1:编译的内核版本与运行的内核版本不一致导致的

解决办法:KERNELDIR := /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

这样编译。

原因2:由于模块依赖的其他模块没有加载导致的。

解决办法1:dmesg | tail 看输出信息中的Unknown symbol,加载上这些模块。

2:modinfo  ./igb.ko | grep depend找模块的依赖,如:depends: dca

然后执行  modprobe dca

insmod ./XXX.ko

参考:http://blog..net/wl_fln/article/details/9465341

14  加载内核模块的错误:insmod: ERROR: could not insert module xxx.ko:File exits

原因:说明已经加载过xxx.ko'啦  不能重复加载

15  undefined reference to pthread_join

原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a

解决办法:在编译中要加 -lpthread参数。

16  GDB出现no debugging symbols found

原因:这是因为编译时没有加-g

解决办法,如:

gcc test.c -o test -lpthread

改成

gcc test.c -o test -g -lpthread

17  static declaration follows non-static declaration

原因是调用的静态函数没有先声明一下,就是它定义在你调用之后啦。

解决办法:调用之前声明一下这个函数。

18  在struct fd_set fds时发生storage size of 'fds' isn't known

原因:fd_set是通过typedef重新声明的新类型,所以fd_set就相当于struct fd_set

解决办法:去掉struct,写成:fd_set fds;

19  make: *** /lib/modules/2.6.32-573.7.1.el6.x86_64/build/: No such file or directory. Stop.

解决办法:

1、安装内核开发包

$ sudo yum install -y kernel-devel kernel-headers

如果上述执行后,发现安装的内核开发包的版本与当前运行的内核版本不一致:

$ sudo yum install "kernel-devel-uname-r == $(uname -r)"

如果上述执行结果是:No package kernel-devel-uname-r == 3.12.6- 200.fc19.x86_64 available.Error: Nothing to do。那么

2、重新创建符号链接

$ ln -s /usr/src/kernels/2.6.32-573.7.1.el6.x86_64/ /lib/modules/2.6.32-431.el6.x86_64/build

$ ll /lib/modules/2.6.32-431.el6.x86_64/build

20 insmod:ERROR:could not insert module xxxx.ko:Invalid module format

原因:编译的内核版本与运行的内核版本不一致导致的

21 -bash:ifconfig:command not found

原因1:查看path配置,如果没发现/sbin,说明是path有问题

解决: 打开/etc/profile文件,在其中输入export PATH=$PATH:/sbin

原因2:输入:find / -name "ifconfig",如果什么也没找到,表示CentOS更换指令了

解决:将"ifconfig"指令更改为"ip addr"

参考:https://www..com/dunitian/p/4974761.html

22 编译内核,make menuconfig时出错

/bin/sh: gcc: command not found

make[1]: *** [scripts/basic/fixdep] Error 127

...

原因:gcc编译器未安装

解决:yum install gcc*

接着make menuconfig可能还会出现错误:

HOSTCC  scripts/basic/fixdep

*** Unable to find the ncurses libraries or the

*** required header files.

*** 'make menuconfig' requires the ncurses libraries.

***

*** Install ncurses (ncurses-devel) and try again.

***

make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1

make: *** [menuconfig] Error 2

解决:yum install ncurses*

参考:http://blog.sina.com.cn/s/blog_875c95f40101kae5.html

23 编译内核,fatal error: openssl/aes.h: No such file or directory

原因:缺少OpenSSL开发包

解决:$ sudo yum install openssl-devel

参考:http://blog.163.com/rz_xiaojia/blog/static/11920919820163260234602/

24 lspci查看硬件信息时提示找不到命令:-bash: lspci: command not found

原因:没有安装pciutils包造成的。

解决:yun install pciutils

参考:http://blog.163.com/wangpeng922@126/blog/static/6413308320121112312058/

PS:同样,如果 lsusb 时也提示找不到命令,那只要 #yum install usbutils就可以了

25 error: request for member ‘arg1’ in something not a structure or union

原因:. 与 -> 搞错了

解决:如果它是地址,就在它后边用 ->,如果它不是地址,就在它后边就用 .

参考:https://www..com/annie-fun/p/6369872.html

26 test_rpc.py: error: invalid choice: 's' (choose from 'nvmeerror')

说明:表示说这个值(s)是无效的,要将s替换成nvmeerror

27 error: dereferencing pointer to incomplete type

原因:这个错误是指针指向的结构体类型没有定义。

解决:1 没有包含相应的头文件的情况,包含对应头文件就ok了。

2 自定义的结构体定义在.c文件中,在其他.c文件中使用该结构体指针时,也会出现类似错误。

28 error: invalid application of ‘sizeof’ to incomplete type

原因:对于不完整类型,sizeof都不能通过编译

29 /build/lib/libspdk_bdev_nvme.a(blockdev_nvme_rpc.o):(.data+0x0): multiple definition of `req_timeout_ticks'

/build/lib/libspdk_bdev_nvme.a(blockdev_nvme.o):(.data+0x8): first defined here

原因:在头文件中定义了变量或者函数,而非声明。当此头文件被不同的.c文件引用时,编译生成相应的.o文件,链接的时候头文件被重复引用吗,会报重复定义

解决:在头文件中只声明函数、变量,而不定义。.h 文件中声明函数/变量.c文件中定义函数/给变量赋值,变量面前最好加修饰符extern。

C语言常见警告:

1  warning: suggest parentheses around comparison in operand of ‘&’ [-Wparentheses]

该警告希望你在&(逻辑与)表达式左右加上括号。

2  warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]

该警告表示函数pthread_create的第三个参数不符合函数定义类型

ret = pthread_create(&thre_fd[i].tid, NULL, &err_detect, &arg);

void *err_detect(struct thr_arg *arg);

3  warning:ISO C90 forbids mixed declarations and code

ISO C90 禁止将声明和代码混合,就是说要先声明,再使用

4  warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]

参数3加上void *。如:pthread_create(&thre_fd[i].tid, NULL, (void *)err_detect, &arg);

5  warning:incompatible implicit declaration of built-in function ‘malloc’ [enabled by default]

解决办法:加入下面的头文件

#include

#include

7  warning: "/*" within comment

原因是注释符"/*"里又嵌套了"/*",把嵌套的注释符去掉即可消除warning。

8 warning "implicit declaration of function ‘函数名’ "

这种错误一般是由于此函数所在的头文件中未对函数进行声明

9 warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638)

http://blog..net/edwardandroid/article/details/38558545

2019-11-21 14:18

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力争营收渠道多样化,Line 向自拍应用 Snow 投资 4500 万美元

今年,在科技公司 IPO 市场不景气的情况下,日本通信应用 Line顺利进行了 IPO ,目前正在寻求多样化发展。今天, Line 宣布向自拍应用 Snow 投资 4500 万美元(500 亿韩元)。本次交易之后,Line 将获得 Snow 25% 的股权。 Snow 常被称为…

用.NET设计一个假装黑客的屏幕保护程序

本文主要介绍屏幕保护程序的一些相关知识,以及其在安全方面的用途,同时介绍了如何使用 .NET 开发一款屏幕保护程序,并对核心功能做了介绍,案例代码开源:https://github.com/sangyuxiaowu/HackerScreenSaver背景前几天在…

【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates

IntelliJ IDEA是一款非常优秀的JAVA编辑器,初学都可会对其中的一些做法感到很别扭,刚开始用的时候我也感到很不习惯,在参考了网上一些文章后在这里把我的一些经验写出来,希望初学者能快速适应它,不久你就会感觉到编程是…

复习Javascript专题(一):基本概念部分

一、数据类型 基本类型:Null Boolean String Undefined Number(NB SUN)引用类型:Array Function Object类型判断:typeof 返回结果"undefined"(未定义) "boolean"(布尔值) "st…

c语言时钟报告,C语言图形时钟课程设计实验报告

C语言图形时钟课程设计实验报告 目录1.系统功能要求。2. 数据结构设计及说明。3.程序结构(画流程图) 。4.各模块的功能。5.试验结果(包括输入数据和输出结果) 。6.体会。7.参考文献。8.附录:程序清单及源程序。 系统功能要求:在屏幕上显示一个图形时钟…

微软发布 2023 财年第一季度财报:营收达 501 亿美元,同比增长 11%

北京时间 2022 年 10 月 26 日——微软发布 2023 财年第一季度财报。财报显示,截止到 2022 年 9 月 30 日:营收达到 501 亿美元,增长 11%(按固定汇率计算增长 16%)运营收入为 215 亿美元,增长 6%&#xff0…

《图解CSS3:核心技术与案例实战》——1.3节渐进增强

本节书摘来自华章社区《图解CSS3:核心技术与案例实战》一书中的第1章,第1.3节渐进增强,作者 大漠,更多章节内容可以访问云栖社区“华章社区”公众号查看 1.3 渐进增强第一次听到“渐进增强”(Progressive Enhancement…

阿里云云主机搭建网站攻略 - 云翼计划

阿里云服务器(云主机)搭建网站攻略 - 云翼计划 提示:此搭建攻略为2017版本,阿里云未跟新前。 最新搭建攻略请前往 Amaya丶夜雨博客 / 最新个人博客 https://www.amayaliu.cn 支持一下哦,谢谢。(9.5一…

用c语言递归函数做扫雷,【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)...

/*******************///以下是源文件game.c内容/*******************/#include"game.h"//初始化棋盘的实现void InitBoard(char board[ROWS][COLS], int rows, int cols, char set){int i 0;int j 0;for (i 0; i < rows; i){for (j 0; j < cols; j){board…

记一次 .NET 某医疗器械 程序崩溃分析

一&#xff1a;背景 1.讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的程序偶发性崩溃&#xff0c;让我帮忙看下怎么回事&#xff0c;上面给的压力比较大&#xff0c;对于这种偶发性崩溃&#xff0c;比较好的办法就是利用 AEDebug 在程序崩溃的时候自动抽一管血出来&a…

1251: 字母图形 [水题]

1251: 字母图形 [水题] 时间限制: 1 Sec 内存限制: 128 MB提交: 140 解决: 61 统计题目描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&…

c语言 三角形三边abc,C语言代码输入abc三个数,求一这3个数为边长的三角形面积...

2011-01-04 回答#include #include #include #include #include int main(){float a 0.0;float b 0.0;float c 0.0;float s 0.0;double area 0.0;while(true){printf("input your date(a,b,c):");scanf("%f%f%f",&a,&b,&c);if(!isdigit((…

shell脚本中向hive动态分区插入数据

在hive上建表与普通分区表创建方法一样&#xff1b; 1 CREATE TABLE dwa_m_user_association_circle(2 device_number string, 3 oppo_number string, 4 prov_id_oppo string, 5 area_id_oppo string, 6 dealer_oppo string, 7 short_call_nums bigint, 8 long3…

WPF效果第二百零二篇之TreeView带连接线

前面文章中分享了TreeView支持多选;然而在项目上使用时,领导觉得不满意:体现不了真正的从属关系;既然领导都发话了;那就开整就行了;今天就再来个带有连接线的TreeView效果:1、来看看TreeViewItem的Template:2、展开和收缩动画:3、参考资料https://www.codeproject.com/tips/673…

ObjectTive C语言语法,[译]理解 Objective-C 运行时(下篇)

本文来自网易云社区作者&#xff1a;宋申易所以到底 objc_msgSend 发生了什么&#xff1f;很多事情。看一下这段代码&#xff1a;[self printMessageWithString:"Hello World!"];这实际上被编译器翻译成&#xff1a;objc_msgSend(self, selector(printMessageWithStr…

菜鸟学习MVC实录:弄清项目各类库的作用和用法

MVC模式即&#xff1a;模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;-控制器&#xff08;Controller&#xff09; Model &#xff08;模型&#xff09;&#xff1a;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责数据库中存取数据View…

SSL服务器

2019独角兽企业重金招聘Python工程师标准>>> SSL 是一个安全协议&#xff0c;它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议&#xff08;HTTP&#xff09;使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算…

微软Skype Translator将支持阿拉伯语即时语音翻译

据美国科技时代网(Tech Times)3月9日报道&#xff0c;日前&#xff0c;微软旗下即时翻译软件Skype Translator再添新语种&#xff0c;微软宣布Skype Translator已经支持阿拉伯语。Skype用户可通过使用阿拉伯语即时翻译与朋友、家人以及海外商业伙伴进行交流。 据报道&#xff0…

是什么让.NET7的Min和Max方法性能暴增了45倍?

简介在之前的一篇文章.NET性能系列文章一&#xff1a;.NET7的性能改进中我们聊到Linq中的Min()和Max()方法.NET7比.NET6有高达45倍的性能提升&#xff0c;当时Benchmark代码和结果如下所示&#xff1a;[Params(1000)] public int Length { get; set; }private int[] arr;[Globa…

html标记语言 --框架

html标记语言 --框架六、框架1、什么是框架 框架将浏览器划分成不同的部分&#xff0c;每一部分加载不同的网页 实现同一浏览器窗口中加载多个页面的效果。 语法格式<frameset>.......</frameset>2. 属性2.1 cols使用“像素数”和%分割左右窗口&#xff0c;“*” 表…