1. 程式人生 > >gcc或clang中消除特定警告的方法

gcc或clang中消除特定警告的方法

    一般在編譯程式碼時會有相當多的警告資訊,尤其當我們使用了-Wall選項的時候.-Wall絕不是像其字面意思一樣開啟所有警告.不過它開啟的警告也相當多了.對於一些我們已知"無害"但仍然打印出來擠佔可憐的控制檯空間的警告,我們當然可以將其"遮蔽"掉.

    就拿以下程式碼來說:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>

int main(void)
{
	long double ld = 10000.2222L;
	puts("hello world!???(y/n)");
	printf("long double type size is %lu %lu\n",sizeof(long double),sizeof ld);
	return 0;
}

其會生成一個所謂的"三字元組符號"使用的警告,假設這正是我們需要的效果,所以我們可以忽略該警告.我們編譯一下看看先(無論用gcc還是clang):

gcc:

[email protected]:~/src/c_src$ gcc -Wall -std=c11 -O3 -g0 -s -o x x.c
x.c: In function ‘main’:
x.c:9:21: warning: trigraph ??( converted to [ [-Wtrigraphs]
  puts("hello world!???(y/n)");
 ^

clang:

[email protected]
:~/src/c_src$ clang -Wall -std=c11 -O3 -g0 -s -o x x.c x.c:9:21: warning: trigraph converted to '[' character [-Wtrigraphs] puts("hello world!???(y/n)"); ^ 1 warning generated.

不過在去掉-Wall警告後,可以發現沒有任何警告,一切都安靜了.但這不是我們想要的,因為可能放過一些真正隱含錯誤類的警告.大家可以看到警告提示中寫明瞭該警告的型別:-Wtrigraphs.我們只要加上在W後面加上no即可遮蔽該警告,不過要放在Wall選項後面,如果放在前面,仍然會有警告哦.編譯器應該是以最後一個"有效"選項為準呀!

[email protected]:~/src/c_src$ gcc -Wall -Wno-trigraphs -std=c11 -O3 -g0 -s -o x x.c


相關推薦

gccclang消除特定警告方法

    一般在編譯程式碼時會有相當多的警告資訊,尤其當我們使用了-Wall選項的時候.-Wall絕不是像其字面意思一樣開啟所有警告.不過它開啟的警告也相當多了.對於一些我們已知"無害"但仍然打印出來擠

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

參考資料 顯示 msvc temp cpp get 自己 http https 在使用一些第三方庫或源碼的時候,經常會遇到編譯時產生warnings情況,這些warning不是我們自己的代碼產生的,當然也不好去修改,但每次編譯都顯示一大堆與自己代碼無關的警告也著實看著不爽,

VS消除ANSI API警告

問題 pragma sta 編程 程序 麻煩 warning 現在 ans   最近在VS上寫網絡程序遇到許多問題,因為VS中將許多ANSI中的API都重寫了,那些API大多有漏洞或不能支持現在的一些編程需求了,所以在VS中使用會因為警告而不能用。   但一些老API用著

js方法從json物件獲取特定

 //從json中獲得key指定值     function getJsonValue(obj,name){         var result = null;         var v

在vue解決提示警告 for迴圈報錯的方法

警告 1.出現這個警告問題的時候 我們可以去main.js中在頭部新增這句話: ? 1

zend studioctrl+滑鼠左鍵無法轉到類函式定義檔案的解決方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

IISasp.net程式後臺列印水晶報表 程式假死印表機無反應的解決方法

  最近在做的幾個專案都用到了水晶報表的後臺列印,除錯的時候非常好用,無論是虛擬列印還是指定真實印表機,可一部署到IIS上就莫名其妙的卡死,或者提示了列印成功,印表機卻毫無反應。       一開始認為是許可權的問題,把C:/windows/temp和程式

在ActivityFragment響應ListView上按鈕的點選方法

通常會有這樣的需求,在item上有一個按鈕是確定,或者刪除或者是其它的什麼按鈕, 需要將按鈕的實現寫著Activity中而且還需要知道點選的是第幾個item。 如上面的item中有三個按鈕,目前這個上面的三個按鈕都是用TextView寫的,首先在Adapter中實現點選方法 在ge

JNI搭建 native方法註冊NDK方法對應

                關於JNI的搭建,有兩種方式,一種是傳統的在C/C++模組入口中提供native方法註冊,例項程式碼如下:view plain/*  * JNI registration.  */  static JNINativeMethod gNativeMethods[] = {    

Java匿名內部類使用外部類方法的形參區域性變數必須宣告為final

 對於這個問題,首先我們應該明確的一點是對於匿名內部類,它可能引用三種外部變數:外部類的成員變數外部方法或作用域內的區域性變數外部方法的引數而第一種變數是不需要宣告為final的,但後兩種是需要宣告為final的。那這是為什麼呢?不急,我們首先來看第一個知識點。知識點一,匿名內部類同所有類一

SQLSERVER查詢整個資料庫某個特定值所在的表和欄位的方法

做專案中前些天要手動改資料庫中的一些欄位的值,但發現這個欄位可能會被資料庫中其他的很多張表引用,於是就得想辦法查詢出該條記錄的所有引用的表和欄位,下面的儲存過程可以查詢出整個資料庫中某個特定值所在的表和欄位。 ↓雙擊程式碼段選中複製↓注意修改資料型別xtype 1

oracle正在啟動關閉的解決方法

今天登陸Oracle,發現提示錯誤ora-01033:Oracle正在初始化或關閉,SID=0等錯誤資訊。上網上找了很多資料,發現這種錯誤通常是Oracle資料庫檔案破損造成的,可能由兩種具體原因引起

消除iOS多餘的警告

在iOS開發過程中, 大堆的警告讓人很不爽,接下來介紹幾種消除警告的方法 《1》錯誤如下,是查詢 Library 的時候出現的異常找不到檔案在這個位置;如果你引用的 Frameworks 沒有在標準位置(standard locations),那麼,你需要在工

IDEA版本控制(Git、SVN)忽略特定檔案資料夾

1、Git,在專案跟目錄下增加.gitignore檔案,內容如下:target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### .apt_generated .classpath .factorypath .project .set

python遇到包含UTF-8編碼中文的列表字典的輸出的解決方法

今天,在除錯程式時,遇到了一個編碼問題,折騰了好久,看到了一篇部落格:點選開啟連結 才解決了問題,現在摘錄如下,以免今後遇到同樣的問題再次折騰。 在python 下面一個包含中文字串的列表(lis

Sping+Struts2+Hibernate如何用main方法例項化daoservice

demo1 public static void main(String[] args) {     ApplicationContext context = new ClassPathXmlApplicationContext(               new Str

Java獲取特定符號中間字串子串的方法

使用str.split(" "); 方法 如: 將str這個字串用逗號“,”進行分割,分割後的字串陣列放在a[]中 比如 111,222,333 那麼a[0]=111 a[1]=222 a[2]=

微信QQ打開網址被攔截的解決方法

一起 有一個 一段 遮罩層 打開 備案 科技 .cn china 很多朋友問我,為什麽我的微信域名或者QQ域名怎麽總是提示攔截呢?在這裏跟大家說一下吧: 第一點:就是域名裏面的內容違規或者誘導被舉報而導致的攔截 第二點:就是被用戶或者同行惡意舉報而導致的 第三點:服務商(例

wordwpsmathtype在工具欄/選單欄消失的解決方法

這裡以word 2007舉例說明。 word中綁定了MathType公式編輯器,一般情況下,word中會一直出現MathType的工具 可是有時候發現,word工具欄中的MathType不見了。在word中MathType是作為載入項啟動的,所以每次啟動word時都

安裝jdk後,在cmd輸入“javac”,出現“javac不是內部命令外部命令,也不是可執行的程式批處理檔案”的解決方法

  安裝jdk後,在cmd中輸入“java -version”,可以正常顯示;但是輸入“javac”,卻出現“javac不是內部命令或外部命令,也不是可執行的程式或批處理檔案”。 安裝下載好的jdk後,它會生成兩個bin目錄。區別:其中一個有javac.exe;另外一個個沒