gcc編譯警告選項
Ⅰ gcc編譯C語言報警告
open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>蔽高
int open(const char *pathname, int flags);
int open(const char *pathname,
int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
-------------------------
openat
#include <fcntl.h>
int openat(int dirfd, const char *pathname, int flags);
int openat(int dirfd, const char *pathname, int flags, mode_t mode);
-------------------------
lseek
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
你可以看
man 2 open
man 2 openat
man 2 lseek
--------------------------
問題是否為:
#include <宏扒尺sys/types.h>
#include <sys/stat.h>
頭此滑文件缺失?
Ⅱ gcc 的編譯選項 -MD 是什麼意思
MD 是一個參數.
gcc提供了大量的警告選項,對代碼中可能存在的問題提出警 告,通常可以使用-Wall來開啟以下警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
-Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
-Wcomment -Wformat -Wmain (only for C/ObjC and unless
-ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
-Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
-Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
-Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above)
-Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
-Wunused-variable
unused-function:警告聲明但是沒有定義的static函數;
unused- label:聲明但是未使用的標簽;
unused-parameter:警告未使用的函數參數;
unused-variable:聲明但 是未使用的本地變數;
unused-value:計算了但是未使用的值;
format:printf和scanf這樣的函數中的格式字元 串的使用不當;
implicit-int:未指定類型;
implicit-function:函數在聲明前使用;
char- subscripts:使用char類作為數組下標(因為char可能是有符號數);
missingbraces:大括弧不匹配;
parentheses: 圓括弧不匹配;
return-type:函數有無返回值以及返回值類型不匹配;
sequence-point:違反順序點的代碼,比如 a[i] = c[i++];
switch:switch語句缺少default或者switch使用枚舉變數為索引時缺少某個變數的case;
strict- aliasing=n:使用n設置對指針變數指向的對象類型產生警告的限製程度,默認n=3;只有在-fstrict-aliasing設置的情況下有 效;
unknow-pragmas:使用未知的#pragma指令;
uninitialized:使用的變數為初始化,只在-O2時有 效;
Ⅲ DEV C++如何開啟wall警告選項
盡管 gcc 編譯器的 -Wall 選項涵蓋了絕大多數警告標記,依然有一些警告不能生成。為了生成它們,請使用 -Wextra 選項。
比如,下面的代碼:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i=0;
/* ...
some code here
...
*/
if(i);
return 1;
return 0;
}1234567891011121314
我不小心在 if 條件後面多打了一個分號。現在,如果使用下面的 gcc 命令來進行編譯,不會生成任何警告。
gcc -Wall test.c -o test1
但是如果同時使用 -Wextra 選項來進行編譯:
gcc -Wall -Wextra test.c -o test1
會生成下面這樣一個警告:
test.c: In function 『main』:
test.c:10:8: warning: suggest braces around empty body in an 『if』 statement [-Wempty-body]
if(i);123
從上面的警告清楚的看到, -Wextra 選項從內部啟用了 -Wempty-body 選項,從而可以檢測可疑代碼並生成警告。下面是這個選項啟用的全部警告標記。
-Wclobbered
-Wempty-body
-Wignored-qualifiers
-Wmissing-field-initializers
-Wmissing-parameter-type (僅針對 C 語言)
-Wold-style-declaration (僅針對 C 語言)
-Woverride-init
-Wsign-compare
-Wtype-limits
-Wuninitialized
-Wunused-parameter (只有和 -Wunused 或 -Wall 選項使用時才會啟用)
-Wunused-but-set-parameter (只有和-Wunused或-Wall` 選項使用時才會生成)123456789101112
如果想對上面所提到的標記有更進一步的了解,請查看 gcc 手冊。
Ⅳ 請教gcc編譯下的幾個警告該怎麼去除
C 語言源程序中的錯誤分為幾類,其中有:必須要修改的錯誤(例如:語法錯誤),這類錯誤如果不進行修改,那麼源程序就無法編譯通過和運行;另外還有就是:警告錯誤(例如:對某個變數沒有賦初值就使用它),該類錯誤就是:編譯器能夠讓你的源程序通過,但是你在運行源程序時,得到的運行結果卻未必是正確的(例如:編寫一個累加器的程序,如果不對總和進行清零,那麼每運行一次,結果可能就會是隨機的)。所以說,如果 gcc 編譯器下提出了警告錯誤,你就必須要仔細閱讀源程序,找出其相對應的BUG來,這樣才能夠確保你的程序運行結果是正確的。
Ⅳ gcc編譯,出現錯誤:expected 『=』, 『,』, 『;』, 『asm』 or 『__attribute__』 before ........
這個我也遇到了,有畢皮以下幾種可能:
1,有可能是漏寫;}或者將)寫成},或者是中英文混寫,如將英文的)寫成中文的)。
2.機器碼本身的問題,需要對數據類型進行typedef,如,使用int類型或者 char類型,分別進行定義,typedef in DTYPE,typedef char PCHAR,這一點沒核培試驗過,是看別人的
3.沒有加上需要的頭文件。這一點我碰到了,很神奇。
4.C和C++混編,如在C中使用class inline等,需要加上extern告訴編譯器。因為C和C++的編譯時找不同的內部代碼,如果不告訴他,他會找一種,比如說全部找C的內部解釋,那麼C++部分的就會出錯;
5、明顯的錯誤,比手氏差如c代碼,結果寫了個函數 bool testIt;而bool默認沒有定義,所以報錯;改成int的就行了;
Ⅵ gcc編譯選項 -w是什麼意思
不同版本的動態庫是為了升級方便,舊的程序需要與舊的庫鏈接,新的程序與新的.
一般的做法是把libabc.so連接(symbolic link, ln -s libabc.so.N libabc.so)到最新的版本,這樣以後的新程序,在用gcc -labc的時候,都會鏈接到新的版本.舊的已經鏈接好的程序並不會產生不兼容的問題,因為舊程序在過去已經鏈接過了(動態庫鏈接的信息可以用ldd來查看: ldd /bin/ls).
symbolic link, ln是推薦的維護版本的辦法,不建議更改文件名.
如果你要有一個方便的辦法鏈接舊的版本, 建一個舊的版本的symbolic link就可以了,libabc11.so
ln -s libabc.so.11 libabc11.so
gcc -labc11...
以上回答你滿意么?
Ⅶ Xcode 在用gcc編譯的時候出現警告
代碼的運行編譯是從上往下的,出現這個警告的原因是你寫的某個函數裡面調用了另一個函數,而這個另一個函數是第一次出現,系統辨認不出,當然你是寫在了下面。
所以解決這個問題有兩個方法:1在代碼最上端聲明所有函數。 2把該函數內調用的函數寫到該函數的上面。