คำถามติดแท็ก clang

สำหรับคำถามเกี่ยวกับส่วนหน้าคอมไพเลอร์ clang LLVM สำหรับคำถามทั่วไปเกี่ยวกับ C ให้ใช้แท็ก C

8
จะเรียก clang-format ผ่านโฟลเดอร์ cpp project ได้อย่างไร
มีวิธีเรียกสิ่งที่ต้องการclang-format --style=Webkitสำหรับโฟลเดอร์โครงการ cpp ทั้งหมดแทนที่จะเรียกใช้แยกกันสำหรับแต่ละไฟล์หรือไม่? ฉันกำลังใช้clang-format.pyและvimทำสิ่งนี้ แต่ฉันคิดว่ามีวิธีการใช้ครั้งเดียว

4
ฉันสามารถใช้ C ++ 11 กับ Xcode ได้หรือไม่
ฉันกำลังพิจารณาการใช้คุณสมบัติบางอย่างของ C ++ 11 (เช่นautoเช่น) ในโครงการข้ามแพลตฟอร์ม (Windows + Mac) ใน Windows Visual Studio รองรับบางส่วนของมาตรฐาน C ++ 11 ที่กำลังจะมาถึงซึ่งจะช่วยให้ฉันสามารถลดความซับซ้อนของส่วนต่างๆของฐานรหัสได้อย่างเป็นธรรมชาติดังนั้นฉันจึงสนใจที่จะเริ่มใช้คุณสมบัติเหล่านี้ แต่เท่าที่ทราบ XCode เวอร์ชันปัจจุบัน (3.2.4 + GCC 4.2) ไม่รองรับฟีเจอร์ C ++ 11 ใด ๆ เลย ฉันสามารถอัปเกรดเวอร์ชัน GCC หรือเวอร์ชัน CLang ได้หรือไม่? หรือฉันควรจะกัดลิ้นตัวเองและรอให้ Apple บรรจุเวอร์ชันใหม่ในอนาคต
86 c++  xcode  gcc  c++11  clang 

9
Catalina C ++: การใช้ <cmath> ส่วนหัวให้ข้อผิดพลาด: ไม่มีสมาชิกชื่อ 'signbit' ในเนมสเปซส่วนกลาง
หลังจากอัปเกรดเป็น Catalina จากโมฮาวีการตั้งค่า: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk ใน env ฉันไม่สามารถคอมไพล์โปรแกรมที่ใช้&lt;cmath&gt;ส่วนหัว ฉันลองเปลี่ยน CFLAGS, CCFLAGS, CXXFLAGS ให้ชี้ไปที่ตำแหน่ง MacOSSDK ที่ไม่เปลี่ยนแปลงอะไรเลย Scanning dependencies of target OgreMain /Applications/Xcode.app/Contents/Developer/usr/bin/make -f OgreMain/CMakeFiles/OgreMain.dir/build.make OgreMain/CMakeFiles/OgreMain.dir/build [ 0%] Building CXX object OgreMain/CMakeFiles/OgreMain.dir/src/OgreASTCCodec.cpp.o cd /Users/roman/Downloads/ogre-1.12.2/build/OgreMain &amp;&amp; /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DOgreMain_EXPORTS -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src/OSX -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include/Threading -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/src -I/Users/roman/Downloads/ogre-1.12.2/build/Dependencies/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain/include -I/Users/roman/Downloads/ogre-1.12.2/build/include -I/Users/roman/Downloads/ogre-1.12.2/OgreMain -isystem /usr/local/include -Wall -Winit-self -Wcast-qual -Wwrite-strings -Wextra -Wundef …

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

1
เหตุใด std :: swap จึงไม่ทำงานบนองค์ประกอบเวกเตอร์ <bool> ใน Clang / Win
ฉันมีรหัสเช่นนี้: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } ข้อโต้แย้งเกี่ยวกับความมีสติvector&lt;bool&gt;นอกเหนือจากนี้สิ่งนี้ใช้ได้ผลดีกับ: เสียงดังกราวสำหรับ Mac Visual Studio สำหรับ Windows GCC สำหรับ Linux จากนั้นฉันพยายามสร้างด้วย Clang บน Windows และได้รับข้อผิดพลาดต่อไปนี้ (ย่อ): error: no matching function for call to 'swap' std::swap(vb[0], vb[1]); ^~~~~~~~~ note: candidate function [with _Ty = std::_Vb_reference&lt;std::_Wrap_alloc&lt;std::allocator&lt;unsigned int&gt; &gt; …

4
มีข้อมูลโค้ด C ที่คำนวณการเพิ่มความปลอดภัยมากเกินไปอย่างมีประสิทธิภาพโดยไม่ใช้คอมไพเลอร์ builtins หรือไม่
นี่คือฟังก์ชั่น C ที่เพิ่มintอีกอันหนึ่งซึ่งล้มเหลวหากเกิดโอเวอร์โฟลว์: int safe_add(int *value, int delta) { if (*value &gt;= 0) { if (delta &gt; INT_MAX - *value) { return -1; } } else { if (delta &lt; INT_MIN - *value) { return -1; } } *value += delta; return 0; } น่าเสียดายที่GCC หรือ Clang นั้นไม่ได้รับการปรับปรุงอย่างดี : safe_add(int*, …

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 

1
กำหนดค่า CMake ใน windows เพื่อใช้เสียงดังกราวจากบรรทัดคำสั่งเพื่อรับการสนับสนุน OpenMP ที่ทันสมัย
ฉันมีโครงการทดสอบขนาดเล็กที่ใช้ OpenMP สำหรับการขนาน เป้าหมายของฉันคือการรวบรวมมันเพื่อผลิต.dllและ.libสำหรับห้องสมุด (เพราะโครงการจริงของฉันเชื่อมโยงไปยังห้องสมุดภายนอกที่กระจายโดยใช้ประเภทเหล่านี้) ด้วยการสนับสนุน OpenMP 4.5 หรือใหม่กว่าและทำจากบรรทัดคำสั่งเพื่อให้สามารถทำได้บนนักเทียบท่าสำหรับ การทดสอบและตรวจสอบ (ส่วนนักเทียบท่าอยู่นอกขอบเขตของคำถามนี้มันเป็นเพียงสำหรับการอ้างอิงในสาเหตุที่ฉันต้องการให้มันทำงานจากบรรทัดคำสั่ง) ฉันสามารถรวบรวมโครงการนี้ด้วยคอมไพเลอร์ต่าง ๆ ที่ฉันไม่มีความสุข: MSVC: mkdir build-msvcแล้วcmake ..(จากโฟลเดอร์ที่สร้างขึ้นใหม่) cmake --build . --config Releaseและในที่สุด สิ่งนี้รวบรวมได้ดี แต่รองรับ OpenMP 2.0 เท่านั้นดังนั้นจึงไม่ใช่ตัวเลือกที่ดีสำหรับโครงการจริงของฉัน Intel Parallel Studio: mkdir build-intelแล้วcmake .. -T "Intel C++ Compiler 19.0"(จากโฟลเดอร์ที่สร้างขึ้นใหม่) cmake --build . --config Releaseและในที่สุด สิ่งนี้สนับสนุน OpenMP 5.0 แต่ลิขสิทธิ์ของฉันค่อนข้างแพงสำหรับฉัน MinGW x …

1
ทำไมคอมไพเลอร์ยืนยันที่จะใช้การลงทะเบียนที่บันทึกไว้ที่นี่?
พิจารณารหัส C นี้: void foo(void); long bar(long x) { foo(); return x; } เมื่อฉันรวบรวมใน GCC 9.3 ด้วย-O3หรือ-Osฉันได้รับ: bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret เอาท์พุทจากเสียงดังกราวเหมือนกันยกเว้นการเลือกrbxแทนr12การลงทะเบียน callee- บันทึก อย่างไรก็ตามฉันต้องการ / คาดหวังว่าจะเห็นชุดประกอบที่มีลักษณะดังนี้: bar: push rdi call foo pop rax ret ในภาษาอังกฤษนี่คือสิ่งที่ฉันเห็นว่าเกิดขึ้น: ผลักดันค่าเก่าของการลงทะเบียนที่บันทึกไว้แบบสลี ย้ายxไปยังการลงทะเบียนที่ถูกบันทึกด้วย callee โทร …
10 c  gcc  assembly  clang  x86-64 

3
สามารถแปลง nullptr เป็น uintptr_t ได้หรือไม่ คอมไพเลอร์ไม่เห็นด้วย
พิจารณาโปรแกรมนี้: #include &lt;cstdint&gt; using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } ไม่สามารถคอมไพล์ด้วย msvc v19.24: &lt;source&gt;(5): error C2440: '&lt;function-style-cast&gt;': cannot convert from 'nullptr' to 'my_time_t' &lt;source&gt;(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type &lt;source&gt;(5): error C2789: …
10 c++  c++11  gcc  visual-c++  clang 

1
ปัญหาใน GCC / C ++ 17 พร้อมคลาสเทมเพลตเทมเพลต
พิจารณาโอเวอร์โหลด 2 ตัวต่อไปนี้ template&lt;typename T&gt; bool test() { return true; } template&lt;template&lt;typename ...&gt; class T&gt; bool test() { return false; } อันที่หนึ่งใช้ได้กับคลาสปกติขณะที่อันที่สองใช้ได้กับเทมเพลตที่ไม่ได้สร้างอินสแตนซ์ ตัวอย่างเช่น std::cout&lt;&lt;test&lt;int&gt;()&lt;&lt;std::endl; &lt;-- this yields 1 std::cout&lt;&lt;test&lt;std::list&gt;()&lt;&lt;std::endl; &lt;--this yields 0 ตอนนี้ให้พิจารณาฟังก์ชั่นเทมเพลตต่อไปนี้: template&lt;typename U&gt; bool templfun(){ struct A{ bool f(){ return test&lt;A&gt;(); // &lt;-- this gives an error } …
10 c++  templates  gcc  clang  c++17 

2
การหักประเภทอัตโนมัติไม่ตรงกันระหว่างคอมไพเลอร์ c ++ ที่ต่างกัน
ดังนั้นฉันกำลังพยายามที่จะใช้ผลิตภัณฑ์ dot ( https://en.wikipedia.org/wiki/Dot_product ) ในบางรสชาติของ C ++ ที่ทันสมัยและมาพร้อมกับรหัสต่อไปนี้: #include &lt;iostream&gt; template&lt;class... Args&gt; auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, i2 = v2.begin(); typename std::common_type&lt;Args...&gt;::type s = 0; while( i1 …

2
วิธีการตรวจสอบว่าเป็นโมฆะตัวชี้ (void *) เป็นหนึ่งในสองชนิดข้อมูล?
ฉันกำลังเขียนฟังก์ชันที่ฉันต้องการยอมรับtypeพารามิเตอร์2 วินาที A string(อักขระ *) structureที่จะมี n จำนวนขององค์ประกอบ และเพื่อให้บรรลุนี้ฉันคิดว่าใช้ง่ายvoid *เป็นพารามิเตอร์ประเภท แต่ฉันไม่ทราบวิธีการตรวจสอบว่าพารามิเตอร์เป็นประเภทหนึ่งหรืออื่น ๆ อย่างปลอดภัย
10 c  gcc  types  clang 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.