2010-01-23 36 views
6

Tôi đang sử dụng gcc 4.4.2 trên linuxbiên dịch với c89 và c99 không gcc 4.4.2 mặc định là c99?

Tôi chỉ tự hỏi gcc tự động mặc định để biên dịch với c99 là tiêu chuẩn mới nhất của nó?

Làm cách nào để chỉ định nếu tôi muốn biên dịch với c89 hoặc c99?

Rất cám ơn mọi lời khuyên,

+2

Giá trị mặc định vẫn là gnu89 (ví dụ: C89 với phần mở rộng GNU). –

Trả lời

9

Một lý do không sử dụng C99 theo mặc định là vì tiêu chuẩn này chưa được triển khai đầy đủ trong trình biên dịch. Tuy nhiên, tôi tin rằng bạn có thể đặt chế độ mặc định khi biên dịch gcc, vì vậy nếu lựa chọn tiêu chuẩn thực sự quan trọng đối với bạn, thì tốt hơn là luôn chuyển tùy chọn.

Các tùy chọn là -std=c99-std=c89 tương ứng.

+0

Tôi thường biên dịch với c89 vì nó di động hơn. Nhưng có một số tính năng của c99 mà tôi thích. Tuy nhiên, tôi không thể sử dụng tiêu chuẩn c99 như tôi cần phải biên dịch trên cửa sổ bằng cách sử dụng VS, mà chỉ hỗ trợ c89. Ngay cả phiên bản mới nhất của VS 2010 sẽ không được triển khai c89. – ant2009

+0

Nếu tôi kiểm tra [GCC C99status] (https://gcc.gnu.org/c99status.html) Tôi không thể tìm thấy bất kỳ tính năng bị thiếu nào có thể ảnh hưởng đến hầu hết các trường hợp sử dụng. Bạn có thể đưa ra ví dụ về một tính năng bị thiếu có thể chặn để sử dụng trình biên dịch C99 không? –

+0

@RuudAlthuizen Câu trả lời đó được viết vào năm 2010. Tính đến năm 2016, theo hiểu biết tốt nhất của tôi, chỉ có các khía cạnh chuyên môn về dấu phẩy động bị thiếu. "Truy cập môi trường dấu chấm động trong " được đánh dấu là "Tính năng thư viện, không cần hỗ trợ trình biên dịch" nhưng thực ra điều này ** chắc chắn ** yêu cầu hỗ trợ trình biên dịch, mà GCC không cung cấp. –

9

Từ trang gcc(1) người đàn ông:

-std= 
     Determine the language standard. This option is currently only 
     supported when compiling C or C++. 

.... 

     c99 
     c9x 
     iso9899:1999 
     iso9899:199x 
      ISO C99. Note that this standard is not yet fully supported; 
      see <http://gcc.gnu.org/gcc-4.4/c99status.html> for more 
      information. The names c9x and iso9899:199x are deprecated. 

     gnu89 
      GNU dialect of ISO C90 (including some C99 features). This is 
      the default for C code. 

     gnu99 
     gnu9x 
      GNU dialect of ISO C99. When ISO C99 is fully implemented in 
      GCC, this will become the default. The name gnu9x is 
      deprecated. 
Các vấn đề liên quan