VS2015編譯時“ The POSIX name for this item is deprecated.”的分析
在VS2015中使用itoa()函式進行編譯時,會產生如下報錯資訊,“The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _itoa. ”。該報錯資訊為“POSIX命名方式不推薦使用,推薦使用ISO C和C++的函式名itoa”。就是說,itoa()是採用POSIX方式命名的,而_itoa()是採用ISO C方式命名的。
1 產生原因
1.1 POSIX
POSIX的全稱是Protable Operating System Interface of UNIX,即可移植作業系統介面。POSIX詳細描述了一些函式,這些函式是在C標準庫之外定義的,這些函式只能被部分的編譯器所支援。
1.2 ANSI C
ANSI的全稱是American National Standards Institute即美國國家標準協會。ANSI C則是ANSI對C語言釋出的標準。使用C的軟體開發者被鼓勵遵循ANSI C文件的要求,因為它鼓勵使用跨平臺的程式碼。
ANSIC現在被幾乎所有廣泛使用的編譯器支援。現在多數C程式碼是在ANSI C基礎上寫的。任何僅僅使用標準C並且沒有任何硬體依賴假設的程式碼實際上能保證在任何平臺上用遵循C標準的編譯器編譯成功。
1.3 不使用POSIX
從VC++2005文件中提到,微軟不再支援傳統的POSIX方式命名的C語言函式,取而代之的是在其函式名前加入下劃線的函式名,即ANSI C方式命名的函式。
2 解決方法
基本的解決方法就是如提示資訊中說的那樣,使用ANSI C方式命名的函式來替代POSIX方式命名的函式。如果必須要使用POSIX方式命名的函式,可以通過修改專案的屬性來實現。
在VS2015中選擇“專案->XXX屬性”,開啟屬性頁。之後在左側的樹中選擇“配置屬性->C/C++->前處理器”,如圖1所示。
圖1 開啟專案屬性
在右側的“前處理器定義”欄中選擇“編輯”,如圖2所示。
圖2 編輯前處理器定義
最後,在彈出的前處理器定義的對話方塊中,輸入“_CRT_NONSTDC_NO_DEPRECATE”和“
_CRT_SECURE_NO_WARNINGS”,分別表示使用非標準函式和不彈出警告,最後點選“確定”按鍵,如圖3所示。
圖3 新增前處理器
此時,就可以在程式中使用itoa()函式了。
相關文章
- 使用VS2015 編譯Openssl編譯
- [譯] 優化 Swift 的編譯時間優化Swift編譯
- ndk編譯錯誤:error: 'override' does not name a type編譯ErrorIDE
- JavaScript的預編譯過程分析JavaScript編譯
- 檢視已經編譯過的NGINX當時的編譯引數編譯Nginx
- 使用VS2015從TFS獲取專案後編譯報錯編譯
- 編譯時註解(轉)編譯
- nodejsless及時編譯NodeJS編譯
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯
- [翻譯]關於Swift的編譯時間優化Swift編譯優化
- 程式的編譯和連結原理分析編譯
- 編譯程式(compiler)的簡單分析編譯Compile
- benq,我下了signup,編譯的時候明明編譯了Mysql.java,但在編譯別的檔案時老提示如下錯誤:ENQ編譯MySqlJava
- 編譯錯誤 --- does not name a type和field `XX' has incomplete type編譯
- CMake編譯Qt工程時的問題編譯QT
- 前端工程中的編譯時優化前端編譯優化
- 編譯錯誤導致浪費10多分鐘, 編譯錯誤的提示:xxx does not name a type xxx編譯
- 演示如何建立 POSIX 相容的間隔定時器定時器
- 深入分析 Javac 編譯原理Java編譯原理
- 【編譯原理】語法分析(三)編譯原理語法分析
- Go 編譯時加入版本資訊Go編譯
- 編譯時註解之APT編譯APT
- 編譯錯誤--------:XX does not name a type和field `XX' has incomplete type編譯
- 編譯原理之語法分析-自下而上分析(三)編譯原理語法分析
- 編譯原理之語法分析-自下而上分析(四)編譯原理語法分析
- Android編譯時註解框架系列1-什麼是編譯時註解Android編譯框架
- windows環境VS2015編譯TensorFlow C++程式完全攻略Windows編譯C++
- 提前編譯:AOT-Native Image 和執行時編譯 JIT編譯
- [譯]使用Go Cloud的Wire進行編譯時依賴注入GoCloud編譯依賴注入
- Android Makefile 編譯過程分析Android編譯
- 在使用make編譯時,修改原始檔的註釋內容,是否會重新編譯?編譯
- 優化 Xcode 編譯時間優化XCode編譯
- 編譯JiveGlobals.java時出錯?編譯Java
- 儲存過程編譯時卡死儲存過程編譯
- Oracle EBS -- 編譯Form時出錯Oracle編譯ORM
- Qt 獲取程式編譯時間QT編譯
- CUUG 筆記ORACLE db_name instance_name gobal_name service_name db_unique_name分析筆記OracleGo
- Hollis原創|深入分析Java的編譯原理Java編譯原理