-std=c++11-std=gnu++11c++0xc++11
uint8_t的后缀_t的意思到底表⽰什么?
它就是⼀个结构的标注,可以理解为type/typedef的缩写,表⽰它是通过typedef定义的,⽽不是其它数据类型。
uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使⽤typedef给类型起的别名,新瓶装⽼酒的把戏。不过,不要⼩看了typedef,它对于你代码的维护会有很好的作⽤。⽐如C中没有bool,于是在⼀个软件中,⼀些程序员使⽤int,⼀些程序员使⽤ short,会⽐较混乱,最好就是⽤⼀个typedef来定义,如:
typedef char bool;
c++1z就是c++17
-std=c++11,⽀持C++11标准;
-std=gnu++11,⽀持C++11标准和GNU扩展特性;
C++17 is not supported by GCC v4.8.
C++17 is not supported by GCC v4.9.
C++17 is supported by , but you need -std=c++1z
C++17 is supported by GCC v8 by means of -std=c++17 (and by -std=c++1z which is deprecated since then).
For the GNU-C++ dialects, use -std=gnu++* instead of -std=c++*.
CMAKE_CXX_COMPILER_ID
The old -std=c++0x is only needed for older compiler versions that did not support -std=c++11 and they chose that name to express the preliminary and unstable nature of features (and the ABI) of the then upcoming C++11 (and when it was still unclear whether that would eventually become C++10 or C++12). They changes some of the details adapting to the changing working drafts of the standard at the time before the C++11 standard was officially released.
If your compiler supports -std=c++11, there is no reason to use -std=c++0x. Concerning compatibility: There might even be differences and incompatibilities, but these are not just bound to the use of -std=c++0x, but to specific versions of the compiler. When the compiler supports both, the
y should be identical.
⾖瓣:
上⼀个版本的C++国际标准是2003年发布的,所以叫C++ 03。
然后C++国际标准委员会在研究C++ 03的下⼀个版本的时候,⼀开始计划是07年发布,所以最初这个标准叫C++ 07。
但是到06年的时候,官⽅觉得07年肯定完不成C++ 07,⽽且官⽅觉得08年可能也完不成。最后⼲脆叫C++ 0x。x的意思是不知道到底能在07还是08还是09年完成。
结果2010年的时候也没完成,最后在2011年终于完成了C++标准。所以最终定名为C++11。
GNU provides many extensions to the C and C++ languages
参考 C++ Standards Support in GCC
This mode can be selected with the -std=c++11 command-line flag, or -std=gnu++11 to enable GNU extensions as well.
-
std=c++11,⽀持C++11标准;
-std=gnu++11,⽀持C++11标准和GNU扩展特性;
⽐如,GNU extensions to the C and C++ languages
---------------------
C++11 Support in GCC
GCC 4.8.1 was the first feature-complete implementation of the 2011 C++ standard, previously known as C++0x.
This mode can be selected with the -std=c++11 command-line flag, or -std=gnu++11 to enable GNU extensions as well.
Clang是C 编译器
gnu编译器Clang++是 C++ 编译器( 像 G++ 是 C++ 编译器,⽽gcc是⼀个C 编译器)
=============
-std=  (c++11/gnu++11)
-std指编译器可⽀持的C++标准类型。-std=c++98 ;  -std=c++11,⽀持C++11标准; -std=gnu++11,⽀持C++11标准和GNU扩展特性;⽐如,GNU extensions to the C and C++ languages
-stdlib= (libstdc++/libc++ )
-stdlib指编译器提供的标准C ++库类型。gcc编译器没有像 -stdlib 这样的命令⾏选项。。LLVM clang编译器可以。这是因为clang为您提供链接LLVM标准C ++库( libc ++ )或GNU标准C ++库( libstdc ++ ),⽽gcc只⽀持 libstdc ++ 。
简单说就是两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,⽽ libstdc++ 则是 GCC 的对应 C++ 标准库。    LLVM clang编译程序范例指定CXXFLAGS = -std=c++11 -stdlib=libstdc++
-stdlib=libstdc++ 不是有效的gcc标志
man gcc, man g++都不会到-stdlib=的选项,只有-std=的选项,因为GNU gcc的stdlib默认都是libstdc++
在Linux上:通常,所有常⽤的Linux发⾏版默认使⽤libstdc ++,所有现代版本的GCC都附带⼀个⽀持C ++ 11的libstdc ++。如果要在此处编译c ++ 11代码,请使⽤以下⽅法之⼀:
g++ -std=c++ -o a.out
g++ -std=gnu++ -o a.out
在⼩⽜队之前的OS X上:g++实际上是别名clang++ Apple的旧版libstdc ++是默认版本。您可以通过传递使⽤libc ++(包括c ++ 11库⽀
持)-stdlib=libc++。如果要在此处编译c ++ 11代码,请使⽤以下⽅法之⼀:
g++ -std=c++11 -stdlib=libc++ -o a.out
g++ -std=gnu++11 -stdlib=libc++ -o a.out
clang++ -std=c++11 -stdlib=libc++ -o a.out
clang++ -std=gnu++11 -stdlib=libc++ -o a.out
在⼩⽜队以来的OS X上:libc ++是默认值。您可以通过传递Apple的旧版本的libstdc ++(不包括c ++
11库⽀持)-stdlib=libstdc++
clang++ -std=c++ -o a.out
clang++ -std=gnu++ -o a.out
===============
【glibc 和 libc】
glibc 和 libc 都是 Linux 下的 C 函数库。
libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。
ANSI C 和 GNU C 有什么区别呢?
ANSI C 函数库是基本的 C 语⾔函数库,包含了 C 语⾔最基本的库函数。这个库可以根据头⽂件划分为 15 个部分,其中包括:
1. <ctype.h>:包含⽤来测试某个特征字符的函数的函数原型,以及⽤来转换⼤⼩写字母的函数原型;
2. <errno.h>:定义⽤来报告错误条件的宏;
3. <float.h>:包含系统的浮点数⼤⼩限制;
4. <math.h>:包含数学库函数的函数原型;
5. <stddef.h>:包含执⾏某些计算 C 所⽤的常见的函数定义;
6. <stdio.h>:包含标准输⼊输出库函数的函数原型,以及他们所⽤的信息;
7. <stdlib.h>:包含数字转换到⽂本,以及⽂本转换到数字的函数原型,还有内存分配、随机数字以及其他实⽤函数的函数原型;
8. <string.h>:包含字符串处理函数的函数原型;
9. <time.h>:包含时间和⽇期操作的函数原型和类型;
10. <stdarg.h>:包含函数原型和宏,⽤于处理未知数值和类型的函数的参数列表;
11. <signal.h>:包含函数原型和宏,⽤于处理程序执⾏期间可能出现的各种条件;
12. <setjmp.h>:包含可以绕过⼀般函数调⽤并返回序列的函数的原型,即⾮局部跳转;
13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运⾏的地区进⾏修改。
14. 地区的表⽰⽅法可以使计算机系统处理不同的数据表达约定,如全世界的⽇期、时间、美元数和⼤数字;
15. <assert.h>:包含宏和信息,⽤于进⾏诊断,帮助程序调试。
上述库函数在其各种⽀持 C 语⾔的 IDE 中都是有的。
GNU C 函数库是⼀种类似于第三⽅插件的东西。由于 Linux 是⽤ C 语⾔写的,所以 Linux 的⼀些操作是⽤ C 语⾔实现的,因此,GUN 组织开发了⼀个 C 语⾔的库以便让我们更好的利⽤ C 语⾔开发基于 Linux 操作系统的程序。不过现在的不同的 Linux 的发⾏版本对这两个函数库有不同的处理⽅法,有的可能已经集成在同⼀个库⾥了。
【glibc 和 glib】
错误观点:glib 前⾯有个 "g" ,所以认为 glib 是 GNU 的东东;同时认为 glibc 是 glib 的⼀个⼦集。
其实,glib 和 glibc 基本上没有太⼤联系,可能唯⼀的共同点就是,其都是 C 编程需要调⽤的库⽽已。
glib 是 Gtk+ 库和 Gnome 的基础。glib 可以在多个平台下使⽤,⽐如 Linux、Unix、Windows 等。glib 为许多标准的、常⽤的 C 语⾔结构提供了相应的替代物。
gcc pkg-config --cflags --libs glib-2.0 hello.c -o hello
使⽤glib最有名的就是GNOME了。
【官⽅说明】
Glib
GLib is a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, file
utilities, a main loop abstraction, and so on. It works on many UNIX-like platforms, Windows, OS/2 and BeOS. GLib is released under the GNU Library General Public License (GNU LGPL).
The general policy of GLib is that all functions are invisibly threadsafe with the exception of data structure manipulation
functions, where, if you have two threads manipulating the same data structure, they must use a lock to synchronize their
operation.
GLib is the low-level core library that forms the basis for projects such as GTK+ and GNOME. It provides data structure handling for C, portability wrappers, and interfaces for such runtime functionality as an event loop, threads, dynamic loading, and an
object system.
Glibc
Overview:
Any Unix-like operating system needs a C library: the library which defines the ``system calls'' and other basic facilities such as open, malloc, printf,
The GNU C Library is used as the C library in the GNU systems and most systems with the Linux kernel.
Project Goals:
The GNU C Library is primarily designed to be a portable and high performance C library. It follows all relevant standards
including ISO C11 and POSIX.1-2008. It is also internationalized and has one of the most complete internationalization
interfaces known.
History:
The history of Unix and various standards determine much of the interface of the C library. In general the GNU C Library supports the ISO C and POSIX standards. We also try to support the features of popular Unix variants (including BSD and System V) when those do not conflict with the standards. Different compatibility modes (selectable when you compile an application) allow the peaceful coexistence of compatibility support for different varieties of Unix.
【其他说法】
libc 实际上是⼀个泛指。凡是符合实现了 C 标准规定的内容,都是⼀种 libc 。
glibc 是 GNU 组织对 libc 的⼀种实现。它是 unix/linux 的根基之⼀。
微软也有⾃⼰的 libc 实现,叫 msvcrt 。
嵌⼊式⾏业⾥还常⽤ uClibc ,是⼀个迷你版的 libc 。
【yasi】
libc, glibc在⼀个层次,都是C的标准实现库,是操作系统级别的基⽯之⼀。
glib是⽤C写的⼀些utilities,即C的⼯具库,和libc/glibc没有关系。
函数分三种:
1.ISO C 标准的
2.POSIX 标准的
3.系统⾃⼰扩展的(fopen64/kqueue)
第⼀种可以认为是跨平台的,第⼆种可以认为是跨 Unix/Linux 的,第三种是系统特定的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。