簡體   English   中英

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

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

我只是想知道,C++ 中的所有 I/O 都是通過標准庫頭文件完成的,這意味着(對於 C++ std libs)輸入和輸出流或(對於 C std libs)意味着標准輸入/輸出函數。

我的問題是,是否可以根本不使用這些,而直接與操作系統的 stdin 和 stdout 接口?

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

我讀你的問題是:我可以在沒有#include 頭文件的情況下訪問 I/O 函數。 我看到其他人將其解釋為“不包含標准庫頭文件”

簡單的答案是“不”。 I/O 不是內置在編譯器中的。 它由圖書館提供。

一個更復雜的答案是您可以直接在 .cpp 文件中復制必要頭文件的內容以定義標准庫支持(或定義操作系統支持方法。)。 這將是一件愚蠢的事情,但這是可能的。


回應評論的歷史題外話:

C語言第一次出現時,它是革命性的,原因有很多。 語言設計者最重要的選擇之一(現在大多數現代語言都認為這是理所當然的)是編譯器和它接受的語言應該在不丟失功能的情況下盡可能小。 與當時可用的其他編譯器(FORTRAN、COBOL 等)相比,這使得C編譯器變得很小。

編譯器專注於編譯(不是很好地打印源代碼,或者......)

該語言專注於在不做任何要求的情況下使一切成為可能。 如果您正在編寫一個在數字接口上操作位的嵌入式程序,您不必為在行式打印機上顯示雙精度數字格式的能力付費——無論是在編譯時還是在運行時。

多年來, C語言設計者的這一決定曾多次受到質疑,但該決定始終經受住了挑戰。 它在當時是正確的選擇,現在仍然是正確的選擇——它是使C及其后代成為開發大多數富計算環境的基礎的重要因素。

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));
} 

它存在...

當然,您可以在 unix 系統上執行此操作

#include <unistd.h>

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

或在 Windows 系統上使用操作系統調用的類似方法。

實際上,這就是 Linux 內核所做的,或者就此而言任何其他操作系統內核所做的。 編寫代碼來對系統做任何事情是完全可能的,甚至不需要一行#include 例如,Linux 內核中的kprintf函數就是此類函數的一個示例,它沒有 stl 依賴項,因為內核是自包含的。

當然,這在用戶空間中可能是不可能的,因為操作系統限制了對與將內容放在屏幕上有關的內存部分的訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM