[C++] 編譯時的warning
warning其實可以分為兩種:一種是可以忽略的,一種是不可以忽略的。
比如:int被看作bool的warning往往是不能忽略的,而MyClass*被轉換成int的warning都是可忽略的。
#pragma warning(disable: xxxx)可以顯式的忽略那些確定不會造成惡劣影響的warning。比如VC編譯器在編譯STL時候的一些warning。只有把那些可以忽略的warning都忽略之後,那些必須處理的warning才能從眾多的warning當中過濾出來。
有時候情況會比較複雜,需要區別對待。比如signed和unsigned的區別,就是比較複雜的情況,int i = vector.size()通常不要緊,但是int i = recCount卻未必是安全的。因此,我們應該對於安全的warning可以如下寫程式碼:int i = (int)vector.size(),這樣做了之後,後面那個需要判斷處理的signed和unsigned問題就會浮現出來。
如果不努力去消除那些“可以忽略的warning”,那麼最後的結果必然是warning太多,而導致所有的warning都被程式設計師所忽視。
相關推薦
[C++] 編譯時的warning
我傾向於通過程式碼手段消除所有編譯的warning。最終的產品程式碼編譯的時候應該是沒有warning的。warning其實可以分為兩種:一種是可以忽略的,一種是不可以忽略的。比如:int被看作bool的warning往往是不能忽略的,而MyClass*被轉換成int的war
c++編譯時打印宏定義
get 使用 path oca int 信息 編譯 efi 定義 #pragma message("this is message") #pragma message只能打印字符串,如果想打印任何宏定義可使用: #define PRINT_MACRO_
c編譯時的錯誤:程式中有遊離的‘\240’‘\302’‘\XXX 時解決方案
偶爾從網上看到不錯的原始碼,想研究下,不幸編譯時遇到 “錯誤:程式中有遊離的‘\240’‘\302’”之類的錯誤, 大量的原始碼不可能再全部重敲一遍,經過一番研究,終於讓我找到簡單的解決方案,還是本著讓後人少走彎路的想法,分享下: 首先,編譯器提示的\xxx,都是8進位制的編
Go和C++編譯時的一點小區別------strings命令搞起
最近查一個bug, 用strings命令分析, 竟然出乎意料地沒有結果, 非常納悶。 最後根據這個線索查出了bug的根本原因。 1. 在C++中, 即使函式在程式碼層面沒有被呼叫
||error: ld returned 1 exit status| C++編譯時的問題
今天在用code::blocks寫C++時,遇到了||error: ld returned 1 exit status|,問題 搜了很多文章都不明白,最後看到有人說 Devc++中出現此問題,是由於連結使用make和編譯器(MinGw)中的連結(link)衝突導致的。突然想到了之前在工程中建
C#編譯時出現不是win32有效的資原始檔的解決方法
最近在程式設計的時候遇到了一個非常奇怪的問題,完全寫好的程式碼拷到另外一臺電腦上編譯時出現了錯誤 d:\我的文件\桌面\B顯原始碼20140415\BView\BView\obj\x86\Release\CSC36.tmp”不是有效的 Win32 資原始檔 Bv
linux下C/C++編譯時系統搜尋 include 和 連結庫 檔案路徑的指定
第二種搜尋路徑的設定方式對於程式連線時的庫(包括共享庫和靜態庫) 的定位已經足夠了,但是對於使用了共享庫的程式的執行還是不夠的。這是因為為了加快程式執行時對共享庫的定位速度,避免使用搜索路徑查詢共享庫的低效率,系統會直接讀取 /etc/ld.so.cache 並從中進行搜尋的。/etc/ld.so.
[ c++] cmake 編譯時 undefined reference to `std::cout' 錯誤的解決方案
bin cut () cmake fin epo linking com urn cmake .. 和 make 之後,出現如下錯誤 Linking CXX executable ../../../bin/ModuleTest CMakeFiles/Modu
VS編譯C#程序時去掉xxx.vhost.exe和xxx.pdb文件
程序 技術分享 ges 一個 mage 技術 高級 db文件 cnblogs 去xxx.vhost.exe 打開項目屬性-->調試--啟用Visual Studio承載進程(右側最後一個選項)前面的勾去掉 去掉xxx.pdb 打開項目屬性-->生成
C語言中的編譯時分配內存
一個 地址 移植 eap 也會 功能 空間大小 全局區 限定 1.棧區(stack) --編譯器自動分配釋放,主要存放函數的參數值,局部變量值等; 2.堆區(heap) --由程序員分配釋放; 3.全局區或靜態區 --存放全局變量和靜態變量;程序結束時由系統釋放,分為全局初
vscode c++ 編譯生成後,調試時無法命中斷點
set text return quest class style failure console argc 1 //test.cpp 2 #include <stdio.h> 3 int g_var = 0; 4 void print_line(c
delphi的bpl、dcp 、dcu文件意義(BPL相當於C++中的DLL,DCP相當於C++中的Lib,編譯時需要)
cti function 同時 就會 新建 art img runt 既然 BPL 英文全稱 Borland Package library ,是一種特殊的DLL文件,用於代碼重用和減少可執行文件。編譯bpl時,僅需要添加相應功能的pas文件,如果有窗體,
QT編譯時出現 : warning LNK4098: 預設庫“msvcrtd.lib”與其他庫的使用衝突;請使用 /NODEFAULTLIB:library
1.問題復現: 本人公司使用的是qt5.3 + vs2015開發,但是家裡電腦使用的是qt5.2 + vs2010進行開發。每次在公司寫好部分功能,想拿到家繼續開發時,專案編譯出現下列問題: 1)msvcrtd.lib(ti_inst.obj) : e
C#兩種常量型別,readonly(執行時常量)與const(編譯時常量)
C#中有兩種常量型別,分別為readonly(執行時常量)與const(編譯時常量),本文將就這兩種型別的不同特性進行比較並說明各自的適用場景。 工作原理 readonly為執行時常量,程式執行時進行賦值,賦值完成後便無法更改,因此也有人稱其為只讀變數
關於如何在make一個Linux下的C/C++工程時,自動新增版本號、編譯日期等資訊
本篇的目的:在makefile裡,將系統當前的時間傳遞進待編譯的C/C++工程中,用以指示編譯執行的時間,以及版本資訊等。 不多說了,先來看效果: 當前時間:2017.01.20 0:29 編譯完成後執行效果: [email protected]:~/Desk
linux下用gcc編譯c程式時遇到的問題: error: stdio.h: 沒有那個檔案或目錄
原因是沒有安裝libc6-dev的軟體包。命令列下輸入apt-get install build-essential即可。這個build-essential是幹什麼的呢?原來build-essential是一個列表,包含了編譯debian包必需的大部分元件。安裝完之後,順利解
linux下生產者與消費者問題程式碼,以及編譯c程式碼時error:undefined reference to sem_wait 解決方法之一
//本文的詳細講解內容請大家下載word文件:http://download.csdn.net/detail/chenqiai0/4611801 #include <stdio.h> #include <pthread.h>//執行緒 #includ
使用Dev C++編譯C++工程時出現undefined reference 錯誤
我的工程包含三個檔案,Vector模板類的宣告檔案Vector.h和定義檔案Vector.cpp以及主函式main.cpp,具體程式碼如下: // Vector.h #ifndef VECTOR_H #define VECTOR_H #include <iostream>
C++ builder 6 編譯時提示Unable to open file 'DCLUSR.LIB' 之解決辦法
以前曾出現過類似問題,解決過了! 前幾天應朋友要求幫忙改個東東,新裝CB又出現這個問題。找了半天才解決。特此記在這裡,以備忘記。 找到下圖檔案(C:\Program Files\Borland\CBuilder6\Lib\dclusr.bpk) 雙擊之 點選Instal
kernel編譯時找不到ksign-publickey.c: key.h怎麼辦
When I try to compile CentOS kernel 2.6.32-279, I met following errors:crypto/signature/ksign-publickey.c:2:17: error: key.h: No such fi