gccc11編譯
1. c11是什麼意思
C11標準是 ISO/IEC 9899:2011 - Information technology -- Programming languages -- C 的簡稱,曾用名為C1X。
C11標準是c語言標準的第三版,前一個標准版本是C99標准。2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC) 旗下的C語言標准委員會(ISO/IEC JTC1/SC22/WG14)正式發布了C11標准。
名詞解釋:
C11標準的最終定稿的草案是免費開放的,為N1570 [3] ,但是正式標准文件需要198瑞士法郎。
當前,支持此標準的主流C語言編譯器有:GCC、Clang、Intel C++ Compiler等。
對IEEE754標准-2008的半精度浮點數的支持。盡管遵循GNU C標准規范的編譯器(GCC以及Clang等)使用了C擴展關鍵字__fp16,但是只能對半精度浮點數進行引用,而不能做任何算術操作。因此,這個特性應當在下一個C語言標准中立馬加入進去的,建議使用_Half作為半精度浮點數類型的關鍵字。
2. 如何配置C11標準的編譯器
gcc默認是不支持c99及以上版本的 如果想支持,需要在編譯時加參數:-std=c99 gcc -std=c99 -o xx xx.c 或者在源碼里定義宏 #define __STDC_VERSION__ 199901L
3. 請問C11標準的C語言編譯器在哪裡下載
gcc不含C11的scanf_s等可選函數
4. 一個C語言編譯器可以同時支持多種標准嗎
可以,以下gcc版本為4.8.2:
gcc-std=c11main.c#以c11標准編譯main.c
gcc-std=c99main.c#以c99標准編譯main.c
gcc-std=c89main.c#以c89標准編譯main.c
5. centos7 gcc編譯器對c11標準的支持
gcc-std=c11main.c-omain
前提是你的gcc版本得夠新, 支持 c11才可以.
6. 弄明白哪個版本的gcc才支持c11
【背景】
折騰:
【未解決】cygwin下編譯crosstool-ng在Building C library時出錯:../wcsmbs/uchar.h:47:5: error: #error "<uchar.h> requires ISO C11 mode"
期間,才知道,除了c89,c90,c99之外,還有個c11。
然後,參考:
編譯安裝glibc
而知,低版本的gcc不支持c11。
(而我此處的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的)
所以此處想要去搞清楚,什麼版本的,哪個版本的,gcc,才支持c11。
【解決過程】
1.google搜:
gcc c11
就可以看到:
2 Language Standards Supported by GCC
而明白:
C89=C90:gcc選項是:-ansi, -std=c90 or -std=iso9899:1990;
帶了GNU擴展的:-std=gnu90
C94=C95:gcc選項:-std=iso9899:199409
C99:gcc選項:-std=c99 or -std=iso9899:1999
未完成C99標准之前,叫做C9X
帶了GNU擴展的:-std=gnu99
C11:gcc選項是-std=c11 or -std=iso9899:2011
未完成C11標准之前,叫做C1X
帶了GNU擴展的:-std=gnu11
2.後來找到:
How to enable c11 on later versions of gcc?
可知:
gcc 4.7
之後,才支持c11.
3.參考:
C11Status
得知:
-std=c1x GCC 4.6
-std=c11 GCC 4.7
uchar.h Library issue (glibc 2.16)
【總結】
gcc是到了4.7,才真正支持c11的。
7. 有哪些支持C11標準的編譯器
VS對c語言標准支持得不好,GCC5.1開始完全支持C11,PellesC也是支持C11,不清楚是否完全支持。
8. 請教關於gcc編譯文件時遇到C11支持的問題
由於系統比較復雜,首先用VC++.NET 2005 開發,在PC測試全部通過後,使用GCC編譯時出現了兩個警告,調試時出現一個錯誤.請高手指教:
1.編譯器警告
Queue.h:20: warning: ignoring packed attribute on unpacked non-POD field `CommandPackage Queue::cmd[1]
請教原因
2.編譯器警告
buffer.h:12: warning: alignment of 'Buffer::_ZTV6Buffer' is greater than maximum object file alignment. Using 1
3.調試器報錯
AVR Simulator: Excessive stack overflow, stop sim
簡單說明下程序的情況:
程序用了面向對象的設計,總共涉及了大約10+個類.其中報錯了的是指令緩沖相關類.
Buffer繼承出了E2PBuffer和CommBuffer,在類內部使用了一個CommandPackage(non-POD)類型組成的Queue類.其中Buffer及其兩個子類還有Queue均報了以上兩個警告.
我CommandPackage的大小是 10 Byte,緩沖隊列最大數量是5,緩沖隊列一共產生了6個實例.
由於編譯器不支持new和delete,所有對象在全局實例化.並通過函數初始化函數將引用傳進類
9. 為什麼linux下C11沒法使用memcpy_s
簡單的說,那就是沒有唄;memcpy_s這個本身就是windows的庫,而不是標准庫,更不是你所說的C11的庫;這個應該是windows所謂的更安全的庫;