ฉันจะใช้ C ++ 11 กับ g ++ ได้อย่างไร


21

ฉันกำลังพิมพ์รหัสของฉันทั้งหมดใน gedit และใช้เทอร์มินัลเพื่อรวบรวมโปรแกรมของฉัน หากต้องการทำเช่นนั้นฉันกำลังพิมพ์:

$ g++ main.cpp -o main
$ ./main

และนี่คือการทำงาน อย่างไรก็ตามมันไม่ได้ใช้ C ++ 11 ฉันจะตรวจสอบเวอร์ชั่น C ++ และคอมไพล์ผ่านเทอร์มินัลโดยใช้ C ++ 11 ได้อย่างไร


1
ยังอยู่ในเครือข่ายstackoverflow.com/questions/10363646/compiling-c11-with-g
Jeff Puckett

คุณจะต้องรวม -std = c ++ 11 เสมอหรือมีการตั้งค่าเพื่อให้ทุกครั้งที่ฉันรวบรวมมันโดยอัตโนมัติฟ้องร้อง c ++ 11 หรือ
French Mike

คำตอบ:


53

คุณสามารถทำได้โดยใช้การ-std=c++11ตั้งค่าสถานะ นี่คือตัวอย่าง:

g++ -std=c++11 -Wall -Wextra -Werror main.cpp -o main

โหมดนี้สามารถเลือกได้ด้วยการ-std=c++11ตั้งค่าสถานะบรรทัดคำสั่งหรือ-std=gnu++11เปิดใช้งานส่วนขยาย GNU เช่นกัน (ที่มา )

ดูคำอธิบายของธงอื่น ๆ ด้านล่าง ฉันเชื่ออย่างลึกซึ้งว่าการใช้ค่าสถานะข้อผิดพลาดอย่างน้อยจะทำให้ชีวิตของคุณง่ายขึ้นในระยะยาว เมื่อคุณมีความรู้ที่ดีขึ้นเกี่ยวกับสิ่งที่สคริปต์ของคุณทำคุณสามารถละเว้นคำเตือนหากจำเป็นเพื่อให้ได้ผลลัพธ์ แต่ไม่ควรเป็นมาตรฐาน หวังว่านี่จะช่วยคุณได้ ที่นี่เป็นสถานที่ที่ดีในการเริ่มอ่าน

  • -Wall - เปิดใช้การเตือนที่สำคัญทั้งหมด
  • -Wextra - เปิดใช้งานการเตือนที่สำคัญอื่น ๆ
  • -Werror- ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาดทำให้การรวบรวมล้มเหลวหากมีการรายงานคำเตือนใด ๆ

แหล่งที่มา:

  1. GCC: สรุปตัวเลือก
  2. GCC: ตัวเลือกในการร้องขอหรือระงับการเตือน

5
ขอบคุณ! คุณสนใจที่จะอธิบายว่า "-Wall" และ "-Werror" มีจุดประสงค์อะไรในคำสั่งนั้น

1
เพิ่มเข้าไปในคำตอบของฉัน
Videonauth

7
@ dhaneku.b: ทำไมไม่อ่านเอกสาร? นั่นคือสิ่งที่มันมีไว้เพื่อ
การแข่งขัน Lightness กับโมนิก้า

9
@LightnessRacesinOrbit เพราะเอกสารไม่จำเป็นต้องอธิบายว่าทำไม Videonauth คิดว่ามันเป็นเรื่องสำคัญที่จะต้องเพิ่มพวกเขาแม้ว่าพวกเขาจะไม่ได้อยู่ในตัวอย่างบรรทัดคำสั่งดั้งเดิมหรือจำเป็นต้องอธิบายว่าการโต้ตอบที่สำคัญชนิดใด - "Wall" และ " -Werror "อาจมี" -std = c ++ 11 " (ใช่คำตอบหลังในเรื่องนี้คือ "ไม่มีอะไรพิเศษ" แต่เอกสารไม่ได้บอกว่าและมีหลายกรณีที่แปลก ๆ ที่ไม่ได้กล่าวถึงในเอกสาร "ไม่มีหลักฐานพิสูจน์ได้" t หลักฐานการขาดงาน "และทุกสิ่ง).
RM

2
โหมดนี้สามารถเลือกได้ด้วยการ-std=c++11ตั้งค่าสถานะบรรทัดคำสั่งหรือ-std=gnu++11เปิดใช้งานส่วนขยาย GNU เช่นกัน (ที่มา )
Videonauth
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.