问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中printf是库函数,那么printf的代码到底在哪里呢?

发布网友 发布时间:2022-04-29 05:17

我来回答

5个回答

热心网友 时间:2022-06-19 08:36

书上说的没错,lib文件中存放的就是被调用系统函数的目标代码,但是和声明文件一样不是一个函数一个文件,而是一批函数放在一个文件里。并且文件是二进制的格式,你也查看不了。
对于.h头文件你理解的没错,头文件是只是函数的声明,里面不放函数的具体代码,具体代码比如VC是在C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src 目录下,你可以找到printf.c文件的源码,如果你是想看源码就看这个。我看了其它人的回复,C编译器的不同位置放的是不同的函数部分,以VC为例,include放的是调用函数的声明部分,并且只有声明部分;src目录放的是函数的源码;lib放的是函数的编译后目标文件,但是是打捆放的,代码只有在链接时,才会将库函数进行连接,并生成最后的EXE可执行文件。

热心网友 时间:2022-06-19 08:36

printf()已经被编译成目标代码了,那是找不到的.但是可以在include目录下stdio.h中找到它的声明:
......
char *_Cdecl gets(char *__s);
void _Cdecl perror(const char *__s);
int _Cdecl printf(const char *__format, ...);
int _Cdecl puts(const char *__s);
int _CType remove(const char *__path);
int _CType rename(const char *__oldname,const char *__newname);
void _Cdecl rewind(FILE *__stream);
int _Cdecl scanf(const char *__format, ...);
.....

热心网友 时间:2022-06-19 08:37

你看的是“零基础学C语言书”吧?
翻开第26页左右,可能有点偏差,书上明确写着,系统本身就定义好printf函数了,并且是读者是看不到和找不到的!你不用去理会他的定义,编程时写上他的声明就够了。

热心网友 时间:2022-06-19 08:37

什么找不到,我贴出来给你看:
/***
*printf.c - print formatted
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
* defines printf() - print formatted data
*
*******************************************************************************/
#include <cruntime.h>
#include <stdio.h>
#include <dbgint.h>
#include <stdarg.h>
#include <file2.h>
#include <internal.h>
#include <mtdll.h>
#include <stddef.h>
#include <process.h>
/***
*int printf(format, ...) - print formatted data
*
*Purpose:
* Prints formatted data on stdout using the format string to
* format data and getting as many arguments as called for
* Uses temporary buffering to improve efficiency.
* _output does the real work here
*
*Entry:
* char *format - format string to control data format/number of arguments
* followed by list of arguments, number and type controlled by
* format string
*
*Exit:
* returns number of characters printed
*
*Exceptions:
*
*******************************************************************************/
int __cdecl printf (
const char *format,
...
)
/*
* stdout 'PRINT', 'F'ormatted
*/
{
va_list arglist;
int buffing;
int retval;
_VALIDATE_RETURN( (format != NULL), EINVAL, -1);
va_start(arglist, format);
_lock_str2(1, stdout);
__try {
buffing = _stbuf(stdout);
retval = _output_l(stdout,format,NULL,arglist);
_ftbuf(buffing, stdout);
}
__finally {
_unlock_str2(1, stdout);
}
return(retval);
}
int __cdecl _printf_l (
const char *format,
_locale_t plocinfo,
...
)
{
va_list arglist;
va_start(arglist, plocinfo);
return _vprintf_l(format, plocinfo, arglist);
}
int __cdecl _printf_s_l (
const char *format,
_locale_t plocinfo,
...
)
{
va_list arglist;
va_start(arglist, plocinfo);
return _vprintf_s_l(format, plocinfo, arglist);
}
int __cdecl printf_s (
const char *format,
...
)
{
va_list arglist;
va_start(arglist, format);
return _vprintf_s_l(format, NULL, arglist);
}
int __cdecl _printf_p_l (
const char *format,
_locale_t plocinfo,
...
)
{
va_list arglist;
va_start(arglist, plocinfo);
return _vprintf_p_l(format, plocinfo, arglist);
}
int __cdecl _printf_p (
const char *format,
...
)
{
va_list arglist;
va_start(arglist, format);
return _vprintf_p_l(format, NULL, arglist);
}
static UINT_PTR __enable_percent_n = 0;
/***
*int _set_printf_count_output(int)
*
*Purpose:
* Enables or disables %n format specifier for printf family functions
*
*Internals:
* __enable_percent_n is set to (__security_cookie|1) for security reasons;
* if set to a static value, an attacker could first modify __enable_percent_n
* and then provide a malicious %n specifier. The cookie is ORed with 1
* because a zero cookie is a possibility.
******************************************************************************/
int __cdecl _set_printf_count_output(int value)
{
int old = (__enable_percent_n == (__security_cookie | 1));
__enable_percent_n = (value ? (__security_cookie | 1) : 0);
return old;
}
/***
*int _get_printf_count_output()
*
*Purpose:
* Checks whether %n format specifier for printf family functions is enabled
******************************************************************************/
int __cdecl _get_printf_count_output()
{
return ( __enable_percent_n == (__security_cookie | 1));
}

热心网友 时间:2022-06-19 08:38

我的printf.c是在这个目录下,你去那里看看。
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\printf.c
如果你还想看VC的头文件的话,推荐一个方法,你写个测试程序,包含那个文件,调用那个文件中的函数,在调试时跟进去,系统就会自动打开那个文件了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是什么钞票。 请问这是哪个国家的钞票?价值多少人民币?谢谢 快易典学生平板电脑屏幕碎了怎么办,我在书店买的,可以拿到书店修吗... 沧州龟头周围有一圈小肉粒是什么? 快易典学生电脑的屏幕摔坏了,触屏触不了,可以修吗?如果修的话要多少... 西班牙冷汤和哪些菜品搭配更好喝? 西班牙番茄冷汤提示 我想请问你在秦汉胡同学学古筝...一共需要多少钱啊,包括买古筝的钱 word2010如何查看和编辑文档? 胸罩带子老掉,罩杯边有空 同一部手机频频切换不同微信账户登陆会导致微信账号被封吗? 一个可以在两个手机上切换登陆吗?会封号吗? 两部手机频繁切换两个会被封号吗? 光大信用卡面签需要带什么 什么是量值溯源?如何做才能满足评审准则要求 偏头痛的原因及治疗方法? 《小升初仿真模拟与重点中学分班摸底卷》答案(语文) 小升初语文综合题目 苏江版小学语文小升初语文模拟真题及答案 steam号被盗了封禁能解除吗 请高手解梦,梦见把人头砍下来了 昨晚梦见别人都被杀手杀了,自己的头也被砍了,低头感觉就会掉下来 梦到别人脑袋被刀砍出血了,什么意思? 梦见砍同事的脑袋是咋回事呀 情况如下:梦见我的同事头被人砍了下来,没有梦到血,眼睛还可以看我,好像还可以和说话。 人是具有运气的吗?? 那为什么我总是倒霉? 我半个月前使用了有钱花,昨天拉征信没有显示出来,不过昨天我已经还清了,会影响贷款买房吗? 在考驾照的过程中,有运气这个说法吗? 世上真有运气一说? 真的有运气这个东西存在吗? 求C语言中的库函数的源代码 如printf()函数,我要它的源代码 C语言中如何使用printf来输出C语言中的程序源代码? 一部手机两个来回切换,会被腾讯封号嘛?哪位大神知道苹果手机怎么弄微信分身? printf输出 printf的参数左对齐与右对齐,填0与空格 一部手机可以切换登陆几个呢,切换多了会不会被封号? 请问到哪里可以找C语言的库函数的代码,例如PRINTF函数的代码 微信来回切换账号会被封号吗 为什么学完C语言,我还是看不懂printf的源代码? oppo系统自带的应用分身登录的会被封号吗?使用过的朋友回答下,谢谢! c语言 结构体问题,第一个printf执行之后就程序崩溃了,把错误指出并改正,然后发源代码即可谢谢 printf 输出报错。 一部手机可以切换登陆几个呢&#xF60A;,切换多了会不会被封号? printf的问题 两台不同手机频繁切换会不会封号? c语言输出~~~ C语言用什么关键字可以使原程序的语句在屏幕上原样输出,例如:printf(&quot;** *** **&quot;),在屏幕上原样输出 c语言printf想输出下面那个只能用&#92;n(源代码里会看着乱)或者一行用一个printf吗?有没有别的方法 求一些恶搞程序的C语言源代码 电脑如何才能长时间复制粘贴不停?