vs2020編譯器
A. VS編譯器!
這個和c++沒什麼關系,所有c代碼都可以直接移植,c++向下兼容c,代碼不能用估計是編譯器支持的c語言標准問題.
比如c99或者c11標准,如果是scanf不能用 需要改成s_scanf這樣的錯誤,那就是c標準的問題了,
或者你編譯器要是vs2010以上,十有八九就是編譯器的問題了,修改你的函數吧,新的安全規則比舊的好,學新的沒壞處
B. VS編譯器
生成解決方案是相對於整個工程來講的吧。
C. vs本地編譯器一點就這樣了是怎麼回事
新建一個工程或者解決方案,工程類型選擇Windows Console(控制台程序),命名為ArrayTest(自定義)。然後選中工程ArrayTest,移除掉已經存在的ArrayTest.c或者ArrayTest.cpp,就是已經包含main函數的源文件。然後右鍵添加本地文件「二進制數組的使用.cpp」。編譯即可。
D. vs code怎麼 配置編譯器
默認是GCC的編譯器,CodeBlocks是不自帶其他的編譯器的,如果本機有安裝列表中的其他編譯器的話設置一下就可以用了。
設置編譯器(rc.exe,link.exe,cl.exe)所在的文件夾
Program
Files
Additional
Paths
一般設置的路徑和設置系統頭文件的路徑是一致的,比如:"
C:\Program
Files
(x86)\Microsoft
SDKs\Windows\v7.0A\Include
".說句題外話,著名按鈕ID比如IDOK,IDCANCEL都是在以windows.h為首的頭文件中被定義的.
E. 如圖,為什麼這個代碼可以在VS2022里完美運行,可是在網站的編譯器上卻報錯itoa
scanf_s是vs編譯器提供的內置函數,與其他平台規定的scanf有沖突,故可以改為scanf,不要忘記讓編譯器忽略錯誤,在頂部加上#define _CRT_SECURE_NO_WARNINGS 1
F. 如何確定VS編譯器版本
如何確定VS編譯器版本
_MSC_VER是MSVC編譯器的內置宏,定義了編譯器的版本,_MSC_VER 值對應版本關系
MSVC++ 11.0 _MSC_VER = 1700 (Visual Studio 2012)
MSVC++ 10.0 _MSC_VER = 1600 (Visual Studio 2010)
MSVC++ 9.0 _MSC_VER = 1500 (Visual Studio 2008)
MSVC++ 8.0 _MSC_VER = 1400 (Visual Studio 2005)
MSVC++ 7.1 _MSC_VER = 1310 (Visual Studio 2003)
MSVC++ 7.0 _MSC_VER = 1300 (Visual Studio 2002)
MSVC++ 6.0 _MSC_VER = 1200
MSVC++ 5.0 _MSC_VER = 1100
example:
#if (_MSC_VER == 1300) //vc7
#import "acax16ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1200) //vc6
#import "acad.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1400) //vc8
#import "acax17ENU.tlb" no_implementation raw_interfaces_only named_guids
#elif (_MSC_VER == 1500) //vc9
#import "acax18ENU.tlb" no_implementation raw_interfaces_only named_guids
#endif
在程序中加入_MSC_VER宏可以根據編譯器版本讓編譯器選擇性地編譯一段程序。例如一個版本編譯器產生的lib文件可能不能被另一個版
本的編譯器調用,那麼在開發應用程序的時候,在該程序的lib調用庫中放入多個版本編譯器產生的lib文件。在程序中加入_MSC_VER宏
,編譯器就能夠在調用的時根據其版本自動選擇可以鏈接的lib庫版本,如下所示。
#if _MSC_VER >= 1400 // for vc8, or vc9
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc8-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc8-r.lib" )
#endif
#else if _MSC_VER >= 1310 // for vc71
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc71-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc71-r.lib" )
#endif
#else if _MSC_VER >=1200 // for vc6
#ifdef _DEBUG
#pragma comment( lib, "SomeLib-vc6-d.lib" )
#else if
#pragma comment( lib, "SomeLib-vc6-r.lib" )
#endif
#endif
G. 如何在VS 編譯器下 使用純 C 語言編譯器
C語言編譯器都是獨立運行並對c代碼進行編譯的,不像其他的類,庫,項目那樣可以在run time被調用或傳參的。
H. 請問拋磚:VS的編譯器到底做了什麼
最近在學習並發程序設計,其中有個很重要的概念叫原子操作。網上有很多文章論述原子操作的,其中大部分文章不約而同的都使用到了這個例子++操作,來例證很多高級語言中的一條語句並非是不可拆分的原子操作。出於好奇,本人對++操作的原子性在VS2012下寫了一個小程序以測試之,於是乎發現了下面的問題。//測試代碼TEST(ConcurrenceTest, Atomic){ std::vector
<std::thread
threads; threads.push_back(std::thread(std::ref(thread))); threads.push_back(std::thread(std::ref(thread)));for(auto &
t : threads) { t.join(); } std::cout<<"total值:"<<total<<
std::endl;}//線程voidthread(){for(inti =0; i <50000; i++) { total++; }}以上代碼在release下結果都是100000,但在debug下會小於100000。
了解原子操作的朋友應該知道,debug下小於100000的結果應該屬正常現象,因為++操作並不具有原子性,所有在並發的過程中會出現數據競跑的現象。但是在release下所得到的結果卻總是正確的(為了避免偶然性,本人用更多的線程,更大的數據類型同樣做過測試,結果依然正確),這不得不懷疑編譯器在release下對代碼是否做過一定的優化? 那麼這種優化對於程序員來說是一件好事么? 他會不會給一些對此了解不深的程序員造成一種正確的假象?本人是個初學者,寫這些的目的只是拋個磚,以上的觀點也僅是本人的一些小想法,希望有興趣的朋友能來一起討論。