可能重复:
c/c ++函数的源代码
我想知道在哪里可以找到使用的C代码,这样当我写printf("Hello World!")时; 在我的C程序中知道它必须将该字符串打印到STDOUT.我查看了<stdio.h>,但在那里我只能找到它的原型int printf(const char*format,...),但不是内部的样子.
编译程序时,它将转换为机器可以"理解"的机器代码.这个机器代码如何与操作系统交互以执行从键盘输入的操作?对我来说,似乎机器代码应该运行在比操作系统更低的级别,因此,我无法理解操作系统如何充当编译应用程序和硬件之间的中介.
PS:我刚刚开始进行C++编程,我正在努力了解cin和cout是如何工作的
对.今天我花了三个多小时试图理解为什么你不能在保护模式下调用bios ISR.我得到的一旦你设置和IDT它不一定是在通常的地址为IVT加段没有固定的大小在保护模式等.但我仍然不明白为什么不能你jsut创建一个4GB段,将您的IDT段映射到BIOS IVT,将所有内容设置为0,然后调用它们.不应该那样吗?
大多数文章要么说:"记住你不能在保护模式下使用BIOS中断!" 没有探索主题或极具描述性和引用陷阱,例外,图片重新制作,缺乏权利和段记录的问题作为其背后的原因.
如果有人能够提出一个更人性化的解释,那将是非常有帮助的...我不怀疑文章所说的内容,我只是想明白为什么会这么"痛苦"!
提前致谢!
我想知道是否有任何可用的在线资源解释了什么事情,比如printf of C,它解释了在非常低级别发生的事情(BIOS /内核调用)
我很好奇printfLinux内部的工作原理.我不明白它是如何写入数据的STDOUT.
在对内部进行了一些搜索之后,我下载glibc并查看了源代码:
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
Run Code Online (Sandbox Code Playgroud)
在找到这个之后,我深入研究了这个vfprintf函数 - 但该文件大约有2500行不熟悉的C代码.我正在寻找10,000英尺的解释,如何printf与计算机的内存和输出一起工作,以在屏幕上显示字符.
如果我是汇编代码,我还需要做些什么才能完成相同的任务?它依赖于操作系统吗?
我正在努力学习C并且我已经非常困惑了.
在我使用的OOP语言中,存在执行方法重载的能力,其中相同的函数可以具有不同的参数类型并且以最合适的方式调用.
现在在C中我知道情况并非如此,所以我无法弄清楚以下问题,printf()如何工作.
例如:
char chVar = 'A';
int intVar = 123;
float flVar = 99.999;
printf("%c - %i - %f \n",chVar, intVar, flVar);
printf("%i - %f - %c \n",intVar, flVar, chVar);
printf("%f - %c - %i \n",flVar, chVar, intVar);
Run Code Online (Sandbox Code Playgroud)
现在因为C不支持函数重载,printf如何设法获取任何类型的任意数量的参数,然后与它们一起正常工作?
我试图通过下载glibc源程序包找到printf()工作,但似乎可以找到它,虽然我会继续寻找.
这里有人可以解释C如何执行上述任务吗?
可能重复:
没有汇编的C/C++函数定义
嗨再次,我想知道printf如何在内部工作...在内部我指的是使用什么底层系统调用/ ISR等机制...而不是关于变量参数列表...
原因:我正在使用FASM但是控制台i/o几乎没有,我知道我可以使用c库中提供的printf(我不知道如何但这是另一个点)
谢谢.
我在Linux中使用汇编语言编写了一个简单程序(使用nasm),出于教育目的,我想使用BIOS中断代替linux系统调用,这可能吗?
#include<stdio.h>
#include<string.h>
int main() {
char *ptr = NULL;
printf("%s", ptr);//The output is null
// printf("%s\n", ptr); //addition of **\n** give segmentation fault
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个printf输出:(null).但为什么第二个printf产出是: Segmentation fault (core dumped)只是添加:\n?