是否可以在不使用任何头文件的情况下在 C++ 中执行 I/O 操作?

is it possible to perform I/O operations in C++ without using any header files?

我只是想知道,C++ 中的所有 I/O 都是通过标准库头文件完成的,这意味着(对于 C++ 标准库)输入和输出流或(对于 C 标准库)意味着标准 input/output 职能。

我的问题是,是否可以完全不使用这些,直接与 OS 的标准输入和标准输出接口?

在 C++ 中,我的意思是不使用任何头文件。

我将你的问题解读为:我可以在没有#including 头文件的情况下访问 I/O 函数吗?我看到其他人将其解释为 "without including the standard library header files"

简单的答案是 "no"。 I/O 不是编译器内置的。它由图书馆提供。

一个更复杂的答案是您可以直接在 .cpp 文件中复制必要的头文件的内容以定义标准库支持(或定义 OS 支持方法。)。这将是一件愚蠢的事情,但这是可能的。


回应评论的历史题外话:

C 语言首次出现时,它是革命性的,原因有很多。语言设计者最重要的选择之一(现在大多数现代语言都认为这是理所当然的)是编译器和它接受的语言应该尽可能小而不失去功能。与当时可用的其他编译器(FORTRAN、COBOL 等)相比,这使得 C 编译器很小

编译器专注于编译(没有很好地打印源代码,或者......)

该语言的重点是使一切成为可能,而无需提出任何要求。如果您正在编写一个在数字接口上操作位的嵌入式程序,那么您不必为在行式打印机上显示双精度数字的格式支付费用——无论是在编译时还是在 运行 时。

C 语言设计者的这个决定,这些年来多次受到质疑,但这个决定总能经受住挑战。这在当时是正确的选择,现在仍然是正确的选择——它是使 C 及其后代成为我们其他大部分富计算环境的基础的重要因素。

当然,您可以在 unix 系统上执行此操作

#include <unistd.h>

int main(void)
{
    write(1, "Hello world\n", 12);
}

或 windows 系统上的类似系统使用那里的操作系统调用。

实际上,这就是 Linux 内核,或者就此而言,任何其他 os 内核所做的。编写代码来对系统执行任何操作完全是 possible,甚至没有 #include 行。例如,Linux 内核中的 kprintf 函数就是此类函数的一个示例,它没有 stl 依赖项,因为内核是自包含的。

当然,这可能不适用于用户 space,因为 os 限制了对与在屏幕上放置内容有关的内存部分的访问。

unsigned char in(unsigned short port) {
unsigned char rv;
__asm__ __voltaile__ ("inb %1, %0" : "=a" (rv) : "dN" (port));
 return rv;
}
void out(unsigned short port, unsigned char data) {
 __asm__ __voltaile__ ("outb %1, %0" : : "dN" (port) : "a" (data));
} 

存在...