博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cout internal
阅读量:6800 次
发布时间:2019-06-26

本文共 2824 字,大约阅读时间需要 9 分钟。

<?xml version="1.0" encoding="utf-8"?> cout internal

cout internal

先看看cout是这么定义的: istream cout(&fout)

//C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\cout.cpp// cout -- initialize standard output stream#include 
#include
#pragma warning(disable: 4074)#pragma init_seg(compiler)static std::_Init_locks initlocks;_STD_BEGIN // OBJECT DECLARATIONS__PURE_APPDOMAIN_GLOBAL static filebuf fout(_cpp_stdout);#if defined(_M_CEE_PURE)__PURE_APPDOMAIN_GLOBAL extern ostream cout(&fout);#else__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout(&fout);#endif // INITIALIZATION CODEstruct _Init_cout { // ensures that cout is initialized __CLR_OR_THIS_CALL _Init_cout() { // initialize cout _Ptr_cout = &cout; if (_Ptr_cin != 0) _Ptr_cin->tie(_Ptr_cout); if (_Ptr_cerr != 0) _Ptr_cerr->tie(_Ptr_cout); if (_Ptr_clog != 0) _Ptr_clog->tie(_Ptr_cout); } };__PURE_APPDOMAIN_GLOBAL static _Init_cout init_cout;_STD_END/* * Copyright (c) 1992-2007 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. V5.03:0009 */

再看看 _cpp_stdout 是怎么回事?

//C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\yvals.h   #define _cpp_stdin  (&(__iob_func())[0])   #define _cpp_stdout (&(__iob_func())[1])   #define _cpp_stderr (&(__iob_func())[2])   #define _cpp_isleadbyte(c) (__pctype_func()[(unsigned char)(c)] & _LEADBYTE)

关于 __iob_func(): __iob_func() returns a pointer to the array of FILE descriptors that holds stdin, stdout, stderr and any FILE objects opened through the C runtime library. See the MSVC runtime library source _file.c.

//C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\_file.c/* * FILE descriptors; preset for stdin/out/err (note that the __tmpnum field * is not initialized) */FILE _iob[_IOB_ENTRIES] = {        /* _ptr, _cnt, _base,  _flag, _file, _charbuf, _bufsiz */        /* stdin (_iob[0]) */        { _bufin, 0, _bufin, _IOREAD | _IOYOURBUF, 0, 0, _INTERNAL_BUFSIZ },        /* stdout (_iob[1]) */        { NULL, 0, NULL, _IOWRT, 1, 0, 0 },        /* stderr (_iob[3]) */        { NULL, 0, NULL, _IOWRT, 2, 0, 0 },};/* * Initializer and terminator for stdio */int  __cdecl __initstdio(void);void __cdecl __endstdio(void);_CRTALLOC(".CRT$XIC") static _PIFV pinit = __initstdio;_CRTALLOC(".CRT$XPXA") static _PVFV pterm = __endstdio;
//C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\internal.hstruct _iobuf {        char *_ptr;        int   _cnt;        char *_base;        int   _flag;        int   _file;        int   _charbuf;        int   _bufsiz;        char *_tmpfname;        };typedef struct _iobuf FILE;

Post by: (转载请注明出处)

转载于:https://www.cnblogs.com/jalenwang/p/3235982.html

你可能感兴趣的文章
模式识别之线条矩形识别---长方形画布或纸张并提取图像内容
查看>>
面试经典(1)---翻转字的顺序在一个句子
查看>>
Linux socat命令
查看>>
objective-c 中数据类型之中的一个 几何数据类型(CGPoint,CGSize,CGRect)
查看>>
[Dubbo实战]dubbo + zookeeper + spring 实战 (转)
查看>>
mysql学习笔记(二)
查看>>
Minor【 PHP框架】1.简介
查看>>
面试1
查看>>
【Java基础】4、java中的内部类
查看>>
Mac ssh
查看>>
h5 喜帖
查看>>
全局修改默认字体,通过反射也能做到
查看>>
直方图
查看>>
LeetCode: 【L4】N-Queens 解题报告
查看>>
首届HTML5原创游戏大赛将于6月10日拉开序幕
查看>>
8个对于Web设计和开发人员非常有用的在线工具
查看>>
iOS - (简单平移动画/弹出View的使用)
查看>>
Bloom Filter概念和原理
查看>>
SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)
查看>>
STL学习系列八:Set和multiset容器
查看>>