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

คอมไพเลอร์เป็นโปรแกรมคอมพิวเตอร์ที่แปลงซอร์สโค้ดที่เขียนในภาษาโปรแกรมหนึ่งเป็นภาษาคอมพิวเตอร์อื่น

6
คำเตือนของการใช้ประเภทพื้นฐาน (เช่น int) เป็นชั้นเรียนคืออะไร?
เมื่อมีการออกแบบและ implenting ภาษาโปรแกรมเชิงวัตถุในบางจุดหนึ่งต้องให้ทางเลือกเกี่ยวกับการใช้ประเภทพื้นฐาน (เช่นint, float, doubleหรือเทียบเท่า) เป็นชั้นเรียนหรือสิ่งอื่นใด เห็นได้ชัดว่าภาษาในตระกูล C มีแนวโน้มที่จะไม่กำหนดเป็นคลาส (Java มีชนิดดั้งเดิมแบบพิเศษ C # ใช้ภาษาเหล่านี้เป็น struct ที่ไม่เปลี่ยนรูป ฯลฯ ) ฉันสามารถนึกถึงข้อได้เปรียบที่สำคัญมากเมื่อมีการใช้ประเภทพื้นฐานเป็นคลาส (ในระบบชนิดที่มีลำดับชั้นแบบรวม): ชนิดเหล่านี้อาจเป็นชนิดย่อย Liskov ที่เหมาะสมของประเภทรูต ดังนั้นเราจึงหลีกเลี่ยงความสับสนของภาษาด้วย Boxing / unboxing (ชัดเจนหรือโดยปริยาย) ประเภทของ wrapper กฎความแปรปรวนพิเศษพฤติกรรมพิเศษ ฯลฯ แน่นอนฉันสามารถเข้าใจบางส่วนว่าทำไมนักออกแบบภาษาจึงตัดสินใจเลือกวิธีการ: อินสแตนซ์ของชั้นเรียนมักจะมีค่าใช้จ่ายเชิงพื้นที่ (เนื่องจากอินสแตนซ์อาจมี vtable หรือข้อมูลเมตาอื่น ๆ ในโครงร่างหน่วยความจำ) มี (ถ้าภาษาไม่อนุญาตให้สืบทอดกับสิ่งเหล่านั้น) ประสิทธิภาพเชิงพื้นที่ (และพื้นที่เชิงพื้นที่ที่ได้รับการปรับปรุงโดยเฉพาะในอาร์เรย์ขนาดใหญ่) เป็นเหตุผลเดียวที่ว่าทำไมประเภทพื้นฐานมักไม่ได้เรียน? โดยทั่วไปฉันคิดว่าคำตอบคือใช่ แต่คอมไพเลอร์มีอัลกอริธึมการวิเคราะห์แบบ Escape และพวกเขาสามารถอนุมานได้ว่าพวกเขาสามารถ (เลือก) …

2
ASM.js คืออะไรและมีความหมายสำหรับทุกคนอย่างไร
ฉันเริ่มที่จะคำรามได้ยินเกี่ยวกับโครงการนี้เรียกว่าASM.js ปัจจุบันเว็บไซต์ของพวกเขาน่ากลัวและสับสน นี่คือสิ่งที่ฉันรู้จากการวิจัยของฉันบนเว็บ เป็นชุดย่อยของ JavaScript ที่สามารถปรับให้เหมาะสมอย่างมาก ฉันเดาเพราะมันหลีกเลี่ยงส่วนที่มีพลังมากขึ้นของภาษา ประสิทธิภาพของโค้ดที่คอมไพล์ไปยัง ASM.js จะทำงานที่ความเร็วประมาณครึ่งหนึ่งของ C (ไม่ใช่แสง) จุดประสงค์สำหรับผู้รวบรวมเพื่อสร้างภาษาเป้าหมาย ASM.js Firefox กำลังจะจัดส่งพร้อมกับการเพิ่มประสิทธิภาพ ASM.js อบใน ทีมงาน Mozilla และ Unreal นำพาUnreal Engine ไปยังเว็บด้วยมันและทำงานในรูปแบบของFirefoxด้วยความเร็วใกล้เคียง ดูเหมือนจะไม่มีข้อมูลที่เป็นรูปธรรมใด ๆ บนเว็บเกี่ยวกับสิ่งที่เป็นจริงหรือมีประโยชน์หรือจุดประสงค์สุดท้าย เป็นเพราะฉันสามารถรวบรวมฐานรหัสฝั่งเซิร์ฟเวอร์ของฉันและเรียกใช้ในเบราว์เซอร์ที่ความเร็วใกล้เคียง สิ่งที่เป็นประโยชน์สำหรับนักพัฒนา?

5
เทมเพลต C ++ เป็นเพียงแมโครชนิดหนึ่งที่ได้รับการยกย่องหรือไม่?
จากการเปรียบเทียบที่แตกต่างกันระหว่างเทมเพลต C ++ และเจเนอรัล C # / Java เช่นนี้ - /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 ฉันเข้าใจว่ามีการใช้เทมเพลต C ++ โดยการประมวลผลล่วงหน้าบางอย่าง (การแทนที่ข้อความธรรมดาก่อนการแยกวิเคราะห์) ไม่ได้รวบรวม เนื่องจากการตรวจสอบชนิดในเทมเพลต C ++ มีลักษณะคล้ายกับมาโคร C ฉันหมายความว่าหากมีข้อผิดพลาดบางอย่างพวกเขาเป็นข้อผิดพลาดจากรหัสที่สร้างขึ้นหลังจากการประมวลผลบล็อกรหัส templated ไม่ใช่จากแม่แบบเอง กล่าวอีกนัยหนึ่งมันเป็นแค่มาโครระดับสูงในซี จากนั้นฉันก็พบข้อเท็จจริงอื่น ๆ ที่สนับสนุนสิ่งนี้ - ฉันคิดว่าถ้ามีการใช้เทมเพลต C ++ โดยการประมวลผลล่วงหน้าจะมีปัญหากับการเชื่อมโยงแบบไดนามิก (โดยใช้. dll) และ googling ที่รวดเร็วสนับสนุนสิ่งนี้ อีกจุดคือค่าคงที่จำนวนเต็มสามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังเทมเพลต และมันยังรองรับการเรียกซ้ำบางประเภท แต่การเรียกซ้ำนี้ไม่พบในรหัสแอสเซมบลีที่รวบรวม / เครื่อง สิ่งที่เรียกซ้ำได้รับการจัดการในเวลารวบรวมโดยการสร้างฟังก์ชั่นสำหรับทุกการโทรซ้ำและจึงมีไบนารีที่ปฏิบัติการขนาดใหญ่ แต่เร็วกว่า แม้ว่าจะแตกต่างจากแมโคร C แต่มีความสามารถที่เหนือกว่า แต่เท็มเพลต …
27 c++  c  compiler  templates  macros 


2
คุณลักษณะความหมายของ Python (และภาษาไดนามิกอื่น ๆ ) มีส่วนทำให้ความช้าของมันคืออะไร?
ฉันไม่รู้จัก Python มาก ฉันพยายามที่จะเข้าใจอย่างแม่นยำมากขึ้นว่าคุณลักษณะที่แน่นอนของภาษาแบบไดนามิก (à la Python, Lua, Scheme, Perl, Ruby, .... ) กำลังบังคับให้การใช้งานของพวกเขาช้า ในกรณีนี้ Lua 5.3 เครื่องจักร metatableจะทำให้ Lua ค่อนข้างสังหรณ์ใจ แต่ในทางปฏิบัติ Lua มีข่าวลือว่าค่อนข้างเร็ว (และเร็วกว่า Python) นอกจากนี้ผมมีสัญชาตญาณ (อาจจะผิดอย่างใดอย่างหนึ่ง) ว่าตั้งแต่โปรเซสเซอร์ปัจจุบันหน่วยความจำได้ช้ากว่าการคำนวณดิบ (เข้าถึงหน่วยความจำแคชพลาดความต้องการในเวลาเดียวกันเป็นหลายร้อยดำเนินการทางคณิตศาสตร์), พิมพ์แบบไดนามิกการตรวจสอบ (เมนูif (value->type != INTEGER_TAG) return;ใน C parlance) สามารถวิ่งได้ค่อนข้างเร็ว แน่นอนว่าการวิเคราะห์โปรแกรมทั้งหมด (เช่นการดำเนินการตามโครงการของสตาลิน ) สามารถทำให้การใช้ภาษาแบบไดนามิกเป็นนักแปลทำงานได้อย่างรวดเร็ว แต่ลองทำเป็นว่าฉันไม่มีเวลาออกแบบตัววิเคราะห์โปรแกรมทั้งหมดในตอนแรก (ฉันกำลังออกแบบภาษาไดนามิกในจอภาพ MELTของฉันและบางส่วนจะถูกแปลเป็น C)

3
เหตุใดจึงไม่มีคอมไพเลอร์หลามในรหัสเครื่องดั้งเดิม
ดังที่ฉันเข้าใจสาเหตุของความแตกต่างของความเร็วระหว่างภาษาที่คอมไพล์และไพ ธ อนนั้นคือคอมไพล์รหัสแรกไปจนถึงรหัสของเครื่องเนทีฟในขณะที่ไพ ธ อนคอมไพล์ไปยัง python bytecode เพื่อตีความโดย PVM ฉันเห็นว่าวิธีการใช้รหัสหลามบนระบบปฏิบัติการหลายระบบ (อย่างน้อยในกรณีส่วนใหญ่) แต่ฉันไม่เข้าใจว่าทำไมไม่มีคอมไพเลอร์เพิ่มเติม (และเป็นทางเลือก) สำหรับไพ ธ อนซึ่งคอมไพล์เช่นเดียวกับคอมไพเลอร์แบบดั้งเดิม . สิ่งนี้จะทำให้โปรแกรมเมอร์เลือกซึ่งมีความสำคัญต่อพวกเขามากกว่า ความสามารถในการปฏิบัติงานแบบหลายแพลตฟอร์มหรือประสิทธิภาพบนเครื่องเนทีฟ โดยทั่วไป เหตุใดจึงไม่มีภาษาใดที่สามารถประพฤติได้ทั้งภาษาที่แปลและตีความ

6
เหตุใดจึงต้องใช้ lexer เป็นอาร์เรย์ 2d และสวิตช์ขนาดยักษ์
ฉันทำงานอย่างช้าๆเพื่อจบปริญญาของฉันและภาคเรียนนี้คือ Compilers 101 เรากำลังใช้Dragon Bookอยู่ ไม่นานในหลักสูตรและเรากำลังพูดถึงการวิเคราะห์คำศัพท์และวิธีการที่จะสามารถนำไปใช้ผ่านทางออปติคัลไฟไนต์ จำกัด (ต่อไปนี้คือ DFA) ตั้งค่าสถานะ lexer ต่างๆกำหนดช่วงการเปลี่ยนภาพเป็นต้น แต่ทั้งศาสตราจารย์และหนังสือเสนอให้นำพวกมันไปใช้ผ่านตารางการเปลี่ยนแปลงซึ่งมีขนาดเท่ากับอาร์เรย์ 2 มิติขนาดใหญ่ (สถานะที่ไม่ใช่เทอร์มินัลต่างๆเป็นมิติเดียวและสัญลักษณ์อินพุตที่เป็นไปได้อื่น ๆ ) และคำสั่งสวิตช์ เช่นเดียวกับส่งไปยังตารางการเปลี่ยนแปลงหากอยู่ในสถานะที่ไม่ใช่ขั้ว ทฤษฎีนี้เป็นสิ่งที่ดีและดี แต่ในฐานะคนที่เขียนโค้ดจริง ๆ มาหลายสิบปี มันไม่สามารถทดสอบได้มันไม่สามารถบำรุงรักษาได้ไม่สามารถอ่านได้และมันเป็นความเจ็บปวดและครึ่งหนึ่งในการแก้ไขข้อบกพร่อง ยิ่งไปกว่านั้นฉันยังไม่เห็นว่ามันจะเป็นประโยชน์จากระยะไกลได้อย่างไรหากภาษานั้นมีความสามารถใน UTF การมีรายการตารางการเปลี่ยนแปลงนับล้านรายการต่อรัฐที่มินัลนั้นได้รับความไม่รีบร้อน ดังนั้นการจัดการคืออะไร? เหตุใดหนังสือที่ชัดเจนถึงเรื่องที่บอกว่าทำแบบนี้? ฟังก์ชั่นโอเวอร์เฮดเรียกได้มากขนาดนั้นจริงเหรอ? นี่เป็นสิ่งที่ใช้งานได้ดีหรือจำเป็นเมื่อไวยากรณ์ไม่ทราบล่วงหน้า (นิพจน์ทั่วไป?) หรือบางทีสิ่งที่จัดการกับทุกกรณีแม้ว่าวิธีแก้ปัญหาที่เฉพาะเจาะจงมากขึ้นจะทำงานได้ดีขึ้นสำหรับไวยากรณ์ที่เฉพาะเจาะจงมากขึ้น? ( หมายเหตุ:เป็นไปได้ที่ซ้ำกัน " ทำไมใช้วิธีการ OO แทนคำสั่งสวิตช์ขนาดใหญ่? " อยู่ใกล้ แต่ฉันไม่สนใจ OO วิธีการใช้งานหรือแม้แต่วิธีการเตือนแบบ saner ด้วยฟังก์ชันแบบสแตนด์อโลนก็ดี) [a-zA-Z]+และเพื่อเห็นแก่ตัวอย่างให้พิจารณาภาษาที่มีเพียงตัวบ่งชี้และตัวบ่งชี้เหล่านั้น ในการติดตั้ง DFA …

3
ข้อผิดพลาดทางไวยากรณ์เกิดขึ้นในกระบวนการใด (โทเค็นหรือแยกวิเคราะห์)
ฉันพยายามที่จะเข้าใจการรวบรวมและการตีความทีละขั้นตอนหาภาพรวม ดังนั้นฉันจึงพบคำถามขณะอ่านhttp://www.cs.man.ac.uk/~pjj/farrell/comp3.htmlบทความนี้ มันบอกว่า : ขั้นตอนต่อไปของคอมไพเลอร์เรียกว่า Parser คอมไพเลอร์ส่วนนี้มีความเข้าใจไวยากรณ์ของภาษา มันมีหน้าที่ในการระบุข้อผิดพลาดทางไวยากรณ์และสำหรับการแปลโปรแกรมที่ปราศจากข้อผิดพลาดเป็นโครงสร้างข้อมูลภายในที่สามารถตีความหรือเขียนออกมาในภาษาอื่น แต่ฉันไม่สามารถหาวิธี tokenizer สามารถโทเค็นสตรีมที่กำหนดอย่างถูกต้องซึ่งมีข้อผิดพลาดทางไวยากรณ์ มันควรจะติดอยู่ที่นั่นหรือให้ข้อมูลที่ไม่ถูกต้องกับตัวแยกวิเคราะห์ ฉันหมายถึงว่าการโทเค็นยังไม่ใช่นักแปลหรือ ดังนั้นวิธีที่จะเอาชนะบรรทัดที่มีความเสียหายของคำศัพท์ในขณะที่โทเค็น มีตัวอย่างของโทเค็นภายในลิงก์ด้านบนที่ส่วนหัวของTokenizer ตามที่ฉันเข้าใจรูปแบบของโทเค็นดูเหมือนว่าหากมีสิ่งผิดปกติในโทเค็นรหัสจะเสียหายเช่นกัน คุณช่วยอธิบายความเข้าใจผิดของฉันได้ไหม?

5
ประวัติของ C คอมไพเลอร์คืออะไร?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา เมื่อเราพูดว่า "Dennis Ritchie พัฒนาภาษา C" หมายความว่าเขาได้สร้างคอมไพเลอร์ (โดยใช้ภาษาอื่นที่พัฒนาแล้ว ') ซึ่งสามารถรวบรวมซอร์สโค้ดที่เขียนด้วยภาษา C ได้หรือไม่? ถ้าใช่เขาใช้ภาษาอะไรในการเขียนตัวแปลภาษาซีตัวแรก ฉันเข้าใจคอมไพเลอร์เป็นโปรแกรมและเราสามารถสร้างคอมไพเลอร์อื่นสำหรับภาษา C โดยใช้คอมไพเลอร์ C ที่มีอยู่ในปัจจุบัน ถูกต้องหรือไม่
23 c  compiler 

6
ขั้นตอนทั่วไปที่ใช้เมื่อคอมไพเลอร์คืออะไรพิมพ์แบบตรวจสอบ "ซับซ้อน" นิพจน์?
หมายเหตุ:เมื่อฉันใช้ "ซับซ้อน" ในชื่อเรื่องฉันหมายถึงนิพจน์มีตัวดำเนินการและตัวถูกดำเนินการจำนวนมาก ไม่ใช่ว่าการแสดงออกของตัวเองนั้นซับซ้อน ฉันเพิ่งทำงานกับคอมไพเลอร์เรียบง่ายเพื่อประกอบ x86-64 ฉันได้เสร็จสิ้นการรวบรวมส่วนหน้าหลักของคอมไพเลอร์ - lexer และ parser - และตอนนี้ฉันสามารถสร้างการแสดงบทคัดย่อต้นไม้ไวยากรณ์ของโปรแกรมของฉัน และเนื่องจากภาษาของฉันจะถูกพิมพ์แบบสแตติกฉันกำลังทำขั้นตอนต่อไป: พิมพ์การตรวจสอบซอร์สโค้ด อย่างไรก็ตามฉันมีปัญหาและไม่สามารถแก้ไขด้วยตนเองได้อย่างสมเหตุสมผล ลองพิจารณาตัวอย่างต่อไปนี้: โปรแกรมแยกวิเคราะห์ของคอมไพเลอร์ของฉันได้อ่านบรรทัดของรหัสนี้: int a = 1 + 2 - 3 * 4 - 5 และแปลงเป็น AST ต่อไปนี้: = / \ a(int) \ - / \ - 5 / \ + * / \ / …

1
ทำไมเอกสารในบางภาษาจึงพูดว่า "เทียบเท่า" แทนที่จะเป็น "?"
เหตุใดเอกสารในบางภาษาจึงพูดว่า "เทียบเท่า" แทนที่จะเป็น "?" ตัวอย่างเช่นPython Docsพูด itertools.chain(*iterables) ... เทียบเท่ากับ: def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element หรือการอ้างอิง C ++บนfind_if: พฤติกรรมของแม่แบบฟังก์ชั่นนี้เทียบเท่ากับ: template<class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred) { while (first!=last) …

2
เป็นไปได้ไหมที่จะสร้างล่ามแบบ "bootstrapped" โดยไม่ขึ้นอยู่กับล่ามดั้งเดิม?
ตามที่Wikipedia คำว่า "bootstrapping" ในบริบทของการเขียนคอมไพเลอร์หมายถึงสิ่งนี้ : ในวิทยาการคอมพิวเตอร์ bootstrapping เป็นกระบวนการของการเขียนคอมไพเลอร์ (หรือแอสเซมเบลอร์) ในภาษาการเขียนโปรแกรมต้นฉบับที่ตั้งใจจะคอมไพล์ การใช้เทคนิคนี้นำไปสู่การคอมไพล์ด้วยตนเองที่โฮสต์ และฉันสามารถเข้าใจวิธีการที่จะทำงาน อย่างไรก็ตามเรื่องราวดูเหมือนจะแตกต่างกันเล็กน้อยสำหรับล่าม ตอนนี้แน่นอนมันเป็นไปได้ที่จะเขียนล่ามด้วยตนเอง นั่นไม่ใช่สิ่งที่ฉันขอ สิ่งที่ฉันขอจริงคือมันเป็นไปได้ที่จะทำให้ตัวเองเป็นเจ้าภาพอิสระล่ามของเดิมล่ามแรก เพื่ออธิบายสิ่งที่ฉันหมายถึงพิจารณาตัวอย่างนี้: คุณเขียนรุ่นล่ามครั้งแรกของคุณในภาษาของXและล่ามเป็นภาษาใหม่ที่คุณกำลังสร้างที่เรียกว่าY คุณใช้คอมไพเลอร์ภาษาXเพื่อสร้างไฟล์ปฏิบัติการ ขณะนี้คุณสามารถตีความไฟล์ที่เขียนในภาษาของคุณใหม่Yใช้ล่ามที่เขียนในภาษาX ทีนี้เท่าที่ฉันเข้าใจเพื่อที่จะสามารถ "บู๊ตสแตรป" ล่ามที่คุณเขียนเป็นภาษาXคุณต้องเขียนล่ามเป็นภาษาYอีกครั้ง แต่นี่คือการจับ: แม้ว่าคุณจะเขียนล่ามทั้งในภาษาYคุณยังจะต้องเดิมล่ามที่คุณเขียนในภาษาX เนื่องจากการเรียกใช้ล่ามในภาษาYคุณจะต้องตีความไฟล์ต้นฉบับ แต่สิ่งที่จะแปลความหมายไฟล์ต้นฉบับ? แน่นอนมันไม่มีอะไรเลยดังนั้นคุณถูกบังคับให้ต้องใช้ล่ามคนแรก ไม่ว่าคุณจะมีล่ามใหม่กี่คนในภาษาYคุณจะต้องใช้ล่ามตัวแรกที่เขียนด้วยXเพื่อตีความล่ามต่อไป สิ่งนี้ดูเหมือนจะเป็นปัญหาเพียงเพราะธรรมชาติของล่าม อย่างไรก็ตามในด้านพลิกนี้บทความวิกิพีเดียล่ามจริงพูดเกี่ยวกับล่ามตัวเองโฮสติ้ง นี่เป็นข้อความที่ตัดตอนมาเล็กน้อยซึ่งมีความเกี่ยวข้อง: Self-interpreter เป็นล่ามภาษาโปรแกรมที่เขียนในภาษาโปรแกรมซึ่งสามารถตีความได้เอง ตัวอย่างคือล่ามพื้นฐานที่เขียนในภาษาเบสิก ตัวแปลภาษาเองเกี่ยวข้องกับคอมไพเลอร์ที่โฮสต์ด้วยตนเอง หากไม่มีคอมไพเลอร์สำหรับภาษาที่จะตีความการสร้างตัวแปลภาษาเองจำเป็นต้องมีการใช้งานภาษาในภาษาโฮสต์ (ซึ่งอาจเป็นภาษาโปรแกรมหรือแอสเซมเบลอร์อื่น) ด้วยการมีล่ามคนแรกเช่นนี้ระบบจะถูกบูตและรุ่นใหม่ของล่ามสามารถพัฒนาในภาษาของตัวเอง มันยังไม่ชัดเจนสำหรับฉันว่าจะทำอย่างไร ดูเหมือนว่าไม่ว่าอะไรก็ตามคุณจะถูกบังคับให้ใช้ล่ามรุ่นแรกที่เขียนด้วยภาษาโฮสต์ ตอนนี้บทความดังกล่าวข้างต้นเชื่อมโยงไปยังบทความอื่นในวิกิพีเดียซึ่งให้ตัวอย่างบางส่วนของควรล่ามตัวเองโฮสติ้ง เมื่อตรวจสอบอย่างใกล้ชิด แต่ดูเหมือนว่า "ล่าม" เป็นส่วนสำคัญของล่ามที่จัดการโฮสต์ด้วยตนเอง (โดยเฉพาะอย่างยิ่งที่พบบ่อยเช่น PyPy หรือ Rubinius) …

4
GCC vs clang / LLVM - ข้อดีและข้อเสียของแต่ละ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ข้อดีและข้อเสียของ GCC vs clang / LLVM คืออะไร
20 compiler  clang  gcc  llvm 

6
เมื่อใดที่ต้องจ่ายสำหรับคอมไพเลอร์ C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันเริ่มสงสัยว่านักพัฒนาควรจะจ่ายค่าคอมไพเลอร์ คอมไพเลอร์มาฟรีกับแพลตฟอร์มส่วนใหญ่หรือมีรุ่นฟรีที่หาได้ง่าย ตัวอย่าง: OS X - GCC และ Clang / LLVM มาพร้อมกับเครื่องมือสำหรับนักพัฒนา ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Linux - GCC และฉันก็มั่นใจมากกว่านี้ ฉันไม่รู้สถานะของคอมไพเลอร์ลินุกซ์ในปัจจุบัน ไม่มีข้อ จำกัด ที่นี่สำหรับวิธีและสิ่งที่คุณสามารถเปิดกับพวกเขา Windows - MinGW และ Microsoft เสนอ Visual Studio รุ่นฟรี ไม่มีข้อ จำกัด กับ MinGW แต่ฉันคิดว่า Visual Studio ฟรีมีข้อ จำกัด …
19 c++  compiler 

5
การตรวจจับการลบของการลบ [] กับการลบในเวลารวบรวม
ฉันต้องการทราบว่าเป็นไปได้หรือไม่ที่จะตรวจพบdeleteข้อผิดพลาดที่แสดงความคิดเห็นด้านล่างในเวลารวบรวม? โดยเฉพาะอย่างยิ่งฉันต้องการทราบเกี่ยวกับคอมไพเลอร์ g ++ ClassTypeA *abc_ptr = new ClassTypeA[100]; abc_ptr[10].data_ = 1; delete abc_ptr; // error, should be delete []

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