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)
相关文档:
50个c/c++源代码网站
文章出处:http://blog.chinaunix.net/u3/106835/showart_2190632.html
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码
。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我, ......
题目:在屏幕上画一个矩形
要求:每按一次键盘,该矩形转动45度。矩形的大小和转动的方向有键盘输入,并将输入的数据送文件保存,按回车键程序结束。(功能延伸:改变数据文件的内容后,再根据数据文件里的数据绘制矩形)
......
1.fopen()
fopen的原型是:FILE *fopen(const char
*filename,const char
*mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。
参数filename指向要打开的文件名,mode表示打开状态的字符串,其
取值如下:
字符串 含义
"r" 以只读方式打开 ......
原来是被调用的dll又调用了其他的dll
第二个dll忘记了考到工作目录下
导致了c sharp一直没能加载dll。报错:找不到dll
现在想起来,所谓的dll找不到,应该是找不到第二个dll
消耗时间2个小时,心情稍微有点受影响 ......
测试代码一(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 ......