是否可以在链接C++程序时将C++标准库替换为C标准库?
Is it possible to replace C++ standard library with C standard library when linking C++ programs?
我有两个相关问题,一个是出于好奇的理论问题,另一个是寻求可能的用例。
(1) 是否可以编译 C++ 程序(例如使用 g++)但 link 使用 C 标准库(例如 libc)而不是 C++ 标准库(例如, libstdc++) ?我知道 C++ 标准库包含 C 标准库,但我要求一种方法来保留 only C 库。我知道可以使用 -nostdlib
标志删除标准库,但我只想删除标准库的“C++ 部分”并保留“C 部分”。
(2) 据我所知,有些人仍然使用 C 而不是 C++ 的原因之一是当目标系统内存不足(例如,嵌入式系统)时,C++ 标准库对于有效内存。在这种情况下,用 C stdlib 替换 C++ stdlib 是否可以解决问题并允许这些人免费使用 C++ 语言功能(命名空间、更多类型安全等)?如果可能的话,会有缺点吗?为什么今天的 C 程序员不这样做?
Is it possible to replace C++ standard library with C standard library when linking C++ programs?
不,这是不可能的。通常,C++ 标准库是在 C 接口之上实现的。你必须 link 两者兼顾。
Would it be possible to compile the program as a C++ program (using e.g., g++) but link the program with the C standard library (e.g., libc) instead of the C++ standard library (e.g., libstdc++) ?
不是“代替”,而是“没有”C++ 标准库。只需使用 gcc
.
gcc file.cpp
基本上,g++
和 gcc
之间的区别在于 g++
link 与 C++ 标准库。检查 gcc -v
与 g++ -v
详细输出。
target system has low memory (e.g., an embedded system) where the C++ stdlib would be too big for the available memory.
具体来说,std::cout
(即 std::ostream
)很重,因为缓冲和对 std::iomanip
东西的全面支持。在大多数情况下,std::cout
并未针对嵌入式(较小的尺寸)进行优化,例如 printf
是。异常被避免或根本不使用,因为它们是如何实现的——速度第一,而不考虑大小。在嵌入式中,您通常使用 C++。 Very big MBed 和 Arduino 都是裸机世界中 C++ 的突出例子。
would replacing the C++ stdlib with the C stdlib solves the issue and
不,C++ stdlib 和 C stdlib 是不同的东西。
allows these people to use C++ language features (namespace, more type safety, etc.) at no cost ?
无论如何都不禁止。
Why aren't today's C programmers doing this?
为什么 C++ 程序员不用 Rust 或 Java 编写代码?很可能是因为他们喜欢他们喜欢的编程语言。
我有两个相关问题,一个是出于好奇的理论问题,另一个是寻求可能的用例。
(1) 是否可以编译 C++ 程序(例如使用 g++)但 link 使用 C 标准库(例如 libc)而不是 C++ 标准库(例如, libstdc++) ?我知道 C++ 标准库包含 C 标准库,但我要求一种方法来保留 only C 库。我知道可以使用 -nostdlib
标志删除标准库,但我只想删除标准库的“C++ 部分”并保留“C 部分”。
(2) 据我所知,有些人仍然使用 C 而不是 C++ 的原因之一是当目标系统内存不足(例如,嵌入式系统)时,C++ 标准库对于有效内存。在这种情况下,用 C stdlib 替换 C++ stdlib 是否可以解决问题并允许这些人免费使用 C++ 语言功能(命名空间、更多类型安全等)?如果可能的话,会有缺点吗?为什么今天的 C 程序员不这样做?
Is it possible to replace C++ standard library with C standard library when linking C++ programs?
不,这是不可能的。通常,C++ 标准库是在 C 接口之上实现的。你必须 link 两者兼顾。
Would it be possible to compile the program as a C++ program (using e.g., g++) but link the program with the C standard library (e.g., libc) instead of the C++ standard library (e.g., libstdc++) ?
不是“代替”,而是“没有”C++ 标准库。只需使用 gcc
.
gcc file.cpp
基本上,g++
和 gcc
之间的区别在于 g++
link 与 C++ 标准库。检查 gcc -v
与 g++ -v
详细输出。
target system has low memory (e.g., an embedded system) where the C++ stdlib would be too big for the available memory.
具体来说,std::cout
(即 std::ostream
)很重,因为缓冲和对 std::iomanip
东西的全面支持。在大多数情况下,std::cout
并未针对嵌入式(较小的尺寸)进行优化,例如 printf
是。异常被避免或根本不使用,因为它们是如何实现的——速度第一,而不考虑大小。在嵌入式中,您通常使用 C++。 Very big MBed 和 Arduino 都是裸机世界中 C++ 的突出例子。
would replacing the C++ stdlib with the C stdlib solves the issue and
不,C++ stdlib 和 C stdlib 是不同的东西。
allows these people to use C++ language features (namespace, more type safety, etc.) at no cost ?
无论如何都不禁止。
Why aren't today's C programmers doing this?
为什么 C++ 程序员不用 Rust 或 Java 编写代码?很可能是因为他们喜欢他们喜欢的编程语言。