易截截图软件、单文件、免安装、纯绿色、仅160KB

C Runtime Library详解

.概论
  运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。
    C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。
  随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。
  因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。多线程运行时库与单线程运行时库有两个重大差别:
  (1)类似errno的全局变量,每个线程单独设置一个;
  这样从每个线程中可以获取正确的错误信息。
  (2)多线程库中的数据结构以同步机制加以保护。
  这样可以避免访问时候的冲突。
  Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此Visual C++共提供了6个运行时库。如下表:
C运行时库                           库文件
Single thread(static link)          libc.lib
Debug single thread(static link)    libcd.lib
MultiThread(static link)            libcmt.lib
Debug multiThread(static link)      libcmtd.lib
MultiThread(dynamic link)           msvert.lib
Debug multiThread(dynamic link)     msvertd.lib
  
2.C运行时库的作用
  C运行时库除了给我们提供必要的库函数调用(如memcpy、printf、malloc等)之外,它提供的另一个最重要的功能是为应用程序添加启动函数。
  C运行时库启动函数的主要功能为进行程序的初始化,对全局变量进行赋初值,加载用户程序的入口函数。
  不采用宽字符集的控制台程序的入口点为mainCRTStartup(void)


相关文档:

C/C++与Java函数重载区别!

#include <iostream>
using namespace std;
class Base {
public:
virtual void fn(int x) {
cout << "In Base class, int x = " << x << endl;
}
};
class SubClass : public Base {
public:
// 函数的重载,这样的重载方式,在Java中能行,在C/C++中却不行
virt ......

深入认识Turbo C编译器[转]

1 编译器 有谁真正的理解过一个编译器呢?许多人认为TC很简单很落后,但是即便是这样简单的工具,到底有几个人真正的深入理解了呢?一个简单的编译器都不能理解,如何能成为高手,如何能深入的使用更加高级的工具呢?不要以为自己使用的是VC就很了不起,因为使用这样傻瓜化的工具只能让你看不到事物的本质。接下来我们就来 ......

pro*c makefile 编写

该makefile 只是在linux 中测试过, 若采用hu-ux 只要以下makefile中的gcc 改为aCC  但
hu-ux 未测试
1、首先确定pro*c 工程目录结构
proc/bin
proc/include
proc/lib
proc/src
        src/libsrc
        src/project_src
 &n ......

50个C/C++源码网站

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。
1、http://snippets.dzone.com/tag/c/ --数以千计 ......

C/C++/VC MFC char & int study

测试代码一(VC6.0、C-code):
#include <stdio.h>
void main()
{
 int aa;
 unsigned char j1,j2;
 aa=j1=j2=0;
 aa=49;
 j1=aa;
 printf("j1=%d \n",j1);
 j2=aa;
 printf("j2=%c \n",j2);
}
【分析】:
[1]正如所想象的输出结果:
    j1 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号