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.pswp.cn/news/281575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281575.shtml
英文地址,請注明出處:http://en.pswp.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;“*” 表…