คำถามติดแท็ก visual-c++

Microsoft Visual C ++ เป็นคอมไพเลอร์ C, C ++ และ C ++ / CLI สำหรับ Windows เวอร์ชันล่าสุดของคอมไพเลอร์คือ Visual C ++ 2019 คอมไพเลอร์รองรับภาษาต่อไปนี้: C (รองรับ C90 และ C99 และ C11 ส่วนใหญ่ของมาตรฐาน ISO C ++ ใน Visual Studio 2019); C ++ (รองรับฟีเจอร์ C ++ 11, C ++ 14 และ C ++ 17 ส่วนใหญ่และฟีเจอร์ C ++ 20 บางส่วนใน Visual Studio 2019) C ++ / CLI (ให้การทำงานร่วมกันกับภาษา. NET เช่น C #)

10
gettimeofday () รับประกันความละเอียดระดับไมโครวินาทีหรือไม่
ฉันกำลังพอร์ตเกมซึ่งเดิมเขียนขึ้นสำหรับ Win32 API ไปยัง Linux (ดีคือพอร์ต OS X ของพอร์ต Win32 ไปยัง Linux) ฉันได้ดำเนินการQueryPerformanceCounterโดยให้ uSeconds ตั้งแต่เริ่มกระบวนการ: BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount) { gettimeofday(&currentTimeVal, NULL); performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec); performanceCount->QuadPart *= (1000 * 1000); performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec); return true; } สิ่งนี้ควบคู่ไปกับการQueryPerformanceFrequency()ให้ความถี่คงที่ 1000000 ทำงานได้ดีบนเครื่องของฉันทำให้ฉันมีตัวแปร 64 บิตที่มีuSecondsตั้งแต่เริ่มต้นโปรแกรม ดังนั้นนี้เป็นแบบพกพา? ฉันไม่ต้องการที่จะค้นพบว่ามันทำงานแตกต่างออกไปหากเคอร์เนลถูกคอมไพล์ด้วยวิธีใดวิธีหนึ่งหรืออะไรทำนองนั้น อย่างไรก็ตามฉันสบายดีที่ไม่สามารถพกพาไปยังสิ่งอื่นที่ไม่ใช่ Linux ได้

7
ไม่พบข้อผิดพลาดตัวระบุ 'uint32_t'
ฉันกำลังโอนรหัสจาก Linux C ไปยัง Visual C ++ สำหรับ Windows Visual C ++ ไม่ทราบ#include <stdint.h>ดังนั้นฉันจึงแสดงความคิดเห็นออกไป ต่อมาฉันพบ'uint32_t': identifier not foundข้อผิดพลาดเหล่านั้นมากมาย จะแก้ไขได้อย่างไร?
95 c++  c  visual-c++ 

3
Explicit Return Type ของ Lambda
เมื่อฉันพยายามรวบรวมรหัสนี้ (VS2010) ฉันได้รับข้อผิดพลาดต่อไปนี้: error C3499: a lambda that has been specified to have a void return type cannot return a value void DataFile::removeComments() { string::const_iterator start, end; boost::regex expression("^\\s?#"); boost::match_results<std::string::const_iterator> what; boost::match_flag_type flags = boost::match_default; // Look for lines that either start with a hash (#) // or have nothing …

2
Python ของ Visual Studio เวอร์ชันใดในคอมพิวเตอร์ของฉัน
ฉันพยายามค้นหาเวอร์ชันของ Visual Studio ที่ใช้รวบรวม Python บนคอมพิวเตอร์ของฉัน มันบอกว่า Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 สิ่งที่ฉันไม่เข้าใจคือการMSC V.1500กำหนดนี้ หมายความว่าคอมไพล์ด้วย Visual Studio 2005 หรือเปล่า? ฉันไม่สามารถหาข้อมูลเกี่ยวกับhttp://python.org

7
คุณลักษณะ C ++ 11 ใน Visual Studio 2012
เวอร์ชันตัวอย่างของ Visual Studio 2012 (เวอร์ชันถัดไปหลังจาก VS2010) พร้อมใช้งานแล้ว มีใครรู้บ้างว่าฟีเจอร์ใหม่ของ C ++ 11 ที่รองรับ? (ฉันไม่อยู่ในสถานะที่จะทดลองใช้ในขณะนี้)


4
Import Library ทำงานอย่างไร รายละเอียด?
ฉันรู้ว่าสิ่งนี้อาจดูค่อนข้างธรรมดาสำหรับคนที่ชอบฟัง แต่ฉันต้องการทำให้มันใส เมื่อฉันต้องการใช้ Win32 DLL โดยปกติฉันจะเรียก API เช่น LoadLibrary () และ GetProcAdderss () แต่เมื่อเร็ว ๆ นี้ฉันกำลังพัฒนาด้วย DirectX9 และฉันต้องการเพิ่มไฟล์ d3d9.lib , d3dx9.libและอื่น ๆ ฉันได้ยินมามากพอแล้วว่า LIB ใช้สำหรับการลิงก์แบบคงที่และ DLL สำหรับการลิงก์แบบไดนามิก ดังนั้นความเข้าใจในปัจจุบันของฉันคือ LIB มีการใช้งานวิธีการและเชื่อมโยงแบบคงที่ในเวลาลิงก์เป็นส่วนหนึ่งของไฟล์ EXE สุดท้าย แม้ว่า DLL จะโหลดแบบไดนามิกที่รันไทม์และไม่ได้เป็นส่วนหนึ่งของไฟล์ EXE สุดท้าย แต่บางครั้งมีไฟล์ LIB บางไฟล์ที่มาพร้อมกับไฟล์ DLL ดังนั้น: ไฟล์ LIB เหล่านี้มีไว้ทำอะไร? พวกเขาบรรลุสิ่งที่ตั้งใจไว้ได้อย่างไร? มีเครื่องมือใดบ้างที่สามารถให้ฉันตรวจสอบภายในของไฟล์ LIB เหล่านี้ได้ อัปเดต …
90 c++  c  windows  visual-c++ 

5
โมดูลไม่ปลอดภัยสำหรับ SAFESEH อิมเมจ C ++
ฉันใช้ Microsoft Visual Studio 2011 Professional Beta ฉันพยายามเรียกใช้ไฟล์ OpenCV C ++ ( http://opencv.willowgarage.com/wiki/Welcome ) ที่ฉันได้รวบรวมโดยใช้ cMake & the Visual Studio Complier อย่างไรก็ตามเมื่อฉันไปที่ดีบักโครงการฉันได้รับข้อผิดพลาดมากกว่า 600 ข้อส่วนใหญ่เป็น: ข้อผิดพลาด LNK2026: โมดูลไม่ปลอดภัยสำหรับอิมเมจ SAFESEH เห็นได้ชัดว่าไฟล์เหล่านี้อยู่ในโครงการ opencv_ffmpeg แต่ฉันหาไม่พบฉันได้ดูที่หน้าตัวจัดการข้อยกเว้น Safeeseh ในหน้าวิธีใช้ของ Microsoft แต่ฉันไม่พบคำตอบที่ชัดเจน ฉันสงสัยว่ามีใครบ้างที่มีปัญหานี้และถ้าพวกเขาสามารถแก้ไขได้

5
การเริ่มต้นค่า“ int * ptr = int ()” ไม่ผิดกฎหมายอย่างไร
รหัสต่อไปนี้ (นำมาจากที่นี่ ): int* ptr = int(); คอมไพล์ใน Visual C ++ และค่าเริ่มต้นตัวชี้ เป็นไปได้อย่างไร? ฉันหมายถึงint()ให้วัตถุประเภทหนึ่งintและฉันไม่สามารถกำหนดให้intกับตัวชี้ได้ โค้ดข้างบนไม่ผิดกฎหมายได้อย่างไร?

3
การร่ายสองครั้งไปยัง int ที่ไม่ได้ลงนามบน Win32 ถูกตัดทอนเป็น 2,147,483,648
รวบรวมรหัสต่อไปนี้: double getDouble() { double value = 2147483649.0; return value; } int main() { printf("INT_MAX: %u\n", INT_MAX); printf("UINT_MAX: %u\n", UINT_MAX); printf("Double value: %f\n", getDouble()); printf("Direct cast value: %u\n", (unsigned int) getDouble()); double d = getDouble(); printf("Indirect cast value: %u\n", (unsigned int) d); return 0; } เอาต์พุต (MSVC x86): INT_MAX: 2147483647 …

2
รหัสแม่แบบนี้จะทำให้ขนาดของอาร์เรย์ทำงานอย่างไร
ฉันสงสัยว่าทำไมรหัสประเภทนี้ถึงได้ขนาดของชุดทดสอบ? ฉันไม่คุ้นเคยกับไวยากรณ์ในแม่แบบ template<typename,size_t>อาจจะมีคนที่สามารถอธิบายความหมายของรหัสที่อยู่ภายใต้ นอกจากนี้ยังต้องการลิงค์อ้างอิงด้วยเช่นกัน #define dimof(array) (sizeof(DimofSizeHelper(array))) template <typename T, size_t N> char(&DimofSizeHelper(T(&array)[N]))[N]; void InitDynCalls() { char test[20]; size_t n = dimof(test); printf("%d", n); }
61 c++  visual-c++ 

2
ตัวเลข int -> กฎการแปลงตัวชี้
พิจารณารหัสต่อไปนี้ void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017 ไม่ได้รวบรวมสิ่งนั้น มันตัวเลขมีสายเรียกเกินไปคลุมเครือเป็น1-1เป็นเช่นเดียวกับและดังนั้นจึงสามารถแปลงเป็น0 double*เทคนิคอื่น ๆ เช่น0x0, 0Lหรือstatic_cast<int>(0)ไม่ทำงานอย่างใดอย่างหนึ่ง แม้แต่การประกาศ a const int Zero = 0และการเรียกก็f(Zero)ทำให้เกิดข้อผิดพลาดเดียวกัน มันทำงานได้เพียงอย่างถูกต้องหากไม่ได้เป็นZeroconst ดูเหมือนว่าปัญหาเดียวกันจะใช้กับ GCC 5 และด้านล่าง แต่ไม่ใช่ GCC 6 ฉันอยากรู้ว่านี่เป็นส่วนหนึ่งของมาตรฐาน C ++, ข้อผิดพลาด MSVC ที่รู้จักหรือการตั้งค่าในคอมไพเลอร์ Google คร่าวๆไม่ได้ผลลัพธ์
19 c++  visual-c++  types 

1
เสียงดังกราวไม่ได้รวบรวมรหัส แต่ gcc และ msvc รวบรวมไว้
ฉันไม่เข้าใจว่ามีปัญหาอะไร: ในโค้ดของฉันหรือในคอมไพเลอร์ (น้อยกว่านั้นเป็นไปได้) มีชิ้นส่วนของรหัสเช่นนี้: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type {}; int main() { std::cout << TestA<std::set<int>>::value; } ทั้ง GCC และ MSVC รวบรวมมัน ผมทดสอบบน …

1
ข้อผิดพลาดของคอมไพเลอร์ที่เป็นไปได้ใน MSVC
โค้ดต่อไปนี้คอมไพล์ด้วย gcc และ clang (และคอมไพเลอร์ C ++ 11 อื่น ๆ อีกมากมาย) #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} }; int main() { …
13 c++  c++11  visual-c++ 

1
ตัวแปรอินไลน์สามารถเปลี่ยนแปลงได้หลังจากการเริ่มต้นใน C ++ 17 หรือไม่
สถานการณ์ของฉันเป็นดังต่อไปนี้ (มันทำงานในเสียงดังกราว แต่ไม่ได้อยู่ใน gcc) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); ปัญหาคือตัวแปรอินไลน์แสดง 0 ในสถานที่ที่ฉันคาดไว้ 28 เพราะมันถูกแก้ไขอย่างมากในเวลาทำงาน MSVC ไม่เห็นด้วยกับสิ่งนี้ แต่เสียงดังทำตามที่ฉันคาดไว้ คำถามคือ: สามารถแก้ไขตัวแปรอินไลน์ในเวลาทำงานในสถานการณ์ของฉันได้หรือไม่ (ฉันแก้ไขปัญหาโดยการลบตัวแปรออกไป)
11 c++  visual-c++  dll  clang  c++17 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.