C语言:printf()函数的实现原理

回答我的问题:
这些stdio库函数大部分是调用系统API的,
然而printf函数是在静态连接库中,在程序链接的时候,
printf函数的代码会被链接到OBJ文件中最后生成EXE文件。
那么:包含printf()的EXE程序执行时,EXE程序会调用动态链接库,从而实现系统调用以完成输出功能呢?

我的问题很简单,就是像printf这些调用系统API的库函数,在运行EXE程序时,是不是动态调用DELL库?

我这样之所以提出这样的问题:是基于以下2个知识:
①printf函数调用系统API
②API函数在动态链接库DELL中
综合上述2个知识:我得出结论:printf执行时需要DELL的协助。 ----对吗?

dll种类很多,可以使自定义的,也有是系统DLL 比如win32.DLL,比如打开文件之类的API就在这里。。。
所有的设备操作都是windows系统或驱动程序在执行的,你的程序不可能直接执行,当然你要告诉windows你想干什么,都需要有个桥梁,DLL是动态链接库,他其实是不能独自运行的,他没有自己的线程,所以你说是DLL完成的其实是不全对的。。。比如windows的API所在的那几个DLL文件,而且并没多大,你认为就这几个文件就能扛起一整套windows的所有功能吗???? 根本不是这样的,这windowsAPI的DLL库,只是充当一个传令兵而已。。。。
比如你要打开一个文件,是需要windows确确实实的建立一个文件对象,这必须要windows内核来完成,createfile这个API只是来获得一些相关参数,然后通知windows内核去工作,内核相关的程序,根本不在API所在的文件,WINDOWS运行时时要建立很多自己的进程的,任何功能都必须在进程里完成,单独一个DLL,什么也做不了,每个驱动程序运行都有自己的进程,和API相关的DLL,只是个和外部链接的接口,就相当于电视插销,遥控器一样,如果电视只有个壳,看上去是个电视,遥控器按钮都全乎,但就是不能用,API也是如此。。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-09

是的,用VC调试的功能(先打断点)就能看到当前调试的程序加载了那些DLL,

比如我用的VC2008 Express


VC6.0启动调试后也能看到相似的(调试 -> Moudles )

第2个回答  2020-12-25

第3个回答  推荐于2018-05-17
  printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
  printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
  格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
  函数功能:在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。
  函数用法:
  //以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)
  #include<stdio.h>
  int main()
  {
  int i, j;
  scanf("%d, %d", &i, &j);
  printf("i=%d;j=%d", i, j);
  return 0;
  }

  //以下程序用于输出“百度百科”
  #include<stdio.h>
  int main()
  {
  printf("百度百科");
  return 0;
  }
  

  format
  Format 参数是包含三种对象类型的一个字符串:
  * 无格式字符复制到输出流;
  * 转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;
  * 转义序列。
  本回答被网友采纳

请问,C语言,如下:printf()为什么能执行?
printf函数原型就是printf(const char*,...)第一个参数是一个 char指针,定义的char数组就是一个指针,后面是跟不定数量的参数,11就是一个int型的实参,所以也符合printf的函数原型,编译器检察没有问题,所以可以通过并执行

【C语言-9】printf函数详细解析
printf函数是一个变参函数,其参数个数和类型可以灵活变化。第一个参数是字符串,其中包含固定字符和可替换的占位符,如%d用于整型。后续参数会按照占位符的顺序进行替换。占位符的类型应与后续参数类型匹配:如char, short用%d,long用%ld,long long用%lld;无符号整型用%u, %lu, %llu;浮点型用%f。

C语言的printf打印中文是如何实现的?
值得注意的是,C语言printf函数在处理中文字符时,其内部机制会依赖于编译器的具体实现和编译时的设置。为了确保中文字符的正确打印,程序员需要对这些细节有所了解,并在必要时进行相应的编码转换,以确保输出的一致性和准确性。通过理解这些编码策略,C语言程序员就能更自如地在各种环境中处理中文字符,让p...

printf()函数是什么意思?
printf()是一个用于输出的C语言函数。它的作用是将指定格式的数据输出到标准输出(stdout)或其他指定的输出设备中。printf函数可以将格式化字符串和参数列表作为输入,根据格式化字符串中指定的格式符号,将参数列表中的值插入到字符串中,并生成一个字符串输出。例如,在下面的示例中,使用了printf函数来将...

c语言中,printf(“”)是什么意思?为什么括号里面什么都不加
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字...

c语言中的printf()这样的有不定个参数的函数是如何实现的
printf(" env[%d]:%s\\n", i, env[i]);} argc, argv, env是在main()函数之前被赋值的,编译器生成的可执行文件,main()不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。就想到其他函数是否能实现一样的功能,查询了相关资料,基本上都是利用STDARG.H中的 define va_...

printf()函数的作用是什么?
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。

C语言中printf这个函数的代码实现从哪里可以看到,这个函数是如何实现...
glibc里面可以看到实现,针对这个问题:printf("%s\\n",p); %s这个需要是的一个指针参数,就是从P地址开始打印字符,直到'\\0'd 需要的一个int的值,printf会直接把*p值打印出来

c语言是通过什么来输入输出的?
C语言是通过printf()函数和scanf()函数来进行输入和输出。printf()格式化输出函数,C语言标准库函数,在 stdio.h 中定义。一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为:printf("<格式化字符串>", <参量表>)。输出的字符串除了可以使用字母、数字、空格和一些数字符号以外,还...

c语言printf()中的% d是什么意思?
在C语言的`printf`函数中,`%d`是一个格式说明符,用于输出一个整数。详细来说,`printf`函数是C语言标准库中的一个重要函数,用于格式化输出数据。该函数接受一个格式字符串,以及若干个与格式字符串中格式说明符相对应的值。在格式字符串中,`%d`被用作一个占位符,表示要在这个位置输出一个整数值...

相似回答