学习目标:
1、意识到了写博客对于自学的重要性,所以从今天开始用博客来记录自己的学习内容和学习历程,希望不会太晚。
2、从今天正式开始重新进行对C/汇编的学习,一个月内容将C/汇编提高到一个新的层次。
学习内容:
课后练习:
1.什么是可移植性?
可移植性并不是指所写的程序不作修改就可以在任何计算机上运行,而是指当条件有变化时,程序无需作很多修改就可运行。
2.编译器是做什么的?
编译器是一种特殊的程序,它可以把以特定编程语言写成的程序变为机器可以运行的机器码。我们把一个程序写好,这时我们利用的环境是文本编辑器。我们把程序称为源程序。在此以后程序员可以运行相应的编译器,通过指定需要编译的文件的名称就可以把相应的源文件(通过一个复杂的过程)转化为机器码了。
3.连接器是做什么的?
把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体,该实体能够被操作系统直接执行。其中,某些目标模块是直接作为输入提供给连接器的;而另外一些目标模块则是根据连接过程的需要,从包括有类似printf函数的库文件中取得的。
4.什么是语法错误?
在计算机科学中,语法错误是指程序的语法有误,编译器或解译器在词法分析时无法将其转换为适当的编程语言。语义错误,就是语法上没错误,编译可以通过,也可以运行,也可以得到结果,但结果不符合实际,是错的。这就是语义描述错了。
5.什么是语义错误?
语义错误,就是语法上没错误,编译可以通过,也可以运行,也可以得到结果,但结果不符合实际,是错的。这就是语义描述错了。
6.编写程序打印信息(姓名-年龄-手机号)在三行显示
#include<stdio.h>
void TXT()
{
char Name[564] = "张三";
int Age = 12;
int PhoneNum = 123456;
printf("%s\n", Name);
printf("%d\n", Age);
printf("%d\n", PhoneNum);
return 0;
}
#include <stdio.h>
int main()
{
TXT2();
return 0;
}
7.编写一个函数实现上一题的功能,并且在主函数中调用
上题已实现
8.4种运行库编译选项的区别
C运行库:
C标准定义了一系列常用函数,成为C库函数。C标准仅仅定义了函数原型,没有提供实现。
因此这个任务留给了各个支持C语言标准的编译器。每个编译器通常实现了标准C的超集,称为C运行时库(C Run-Time Library)。
C run-time Library包含了C程序运行的最基本和最常用的函数,没有C run-time Library则main()函数不会被调用,exit()也不能被响应。C运行库与平台相关。
————————————————
版权声明:本文为CSDN博主「lwwl12」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lwwl12/article/details/77045717
动态运行时库(MD/MDd)
动态运行时库主要包括:
·DLL库文件:msvcrt.dll(或 MSVCRTD.DLL for debug build)
·对应的Import Library文件:MSVCRT.LIB(或 MSVCRTD.LIB for debug build)
上面为vc6.0编译器用到的库,在vs中为msvcr100.dll等
静态运行时库(MT/MTd)
静态运行时库(release版)对应的主要文件包括:
LIBC.LIB(Single thread static library, retail version)
LIBCMT.LIB(Multithread static library, retail version)
不同编译器实现的库名都相同,都为libcmt.lib,调试版为libcmtd.lib。
/MT、/MTd、/MD、/MDd各选项区别
MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库(LIBCMT.LIB、LIBC.LIB)集成到程序中,程序体积会变大。
MTd选项:LIB的调试版。
MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行(需添加MSVCPxx.DLL、MSVCRxx.DLL)。
MDd选项:表示使用DLL的调试版。
带T的链接静态库lib;带D链接动态库dll;带d为调试版本,库名加d
Visual C++编译时到底哪个C运行时库联入程序取决于编译选项,选项告诉编译器应用程序想使用什么版本的C标准程序库。与标准程序库有关的选项:/ML、/MLd、/MT、/MTd、/MD、/MDd
/ML对应单线程静态版的标准程序库(libc.lib);
/MT对应多线程静态版标准库(libcmt.lib),此时编译器会自动定义_MT宏;
/MD对应多线程DLL版(导入库msvcrt.lib,DLL是msvcrt.dll),编译器自动定义_MT和_DLL两个宏
后面加d的选项都会让编译器自动多定义一个_DEBUG宏,表示要使用对应标准库的调试版,因此:
/MLd对应调试版单线程静态标准库(libcd.lib);
/MTd对应调试版多线程静态标准库(libcmtd.lib);
/MDd对应调试版多线程DLL标准库(导入库msvcrtd.lib,DLL是msvcrtd.dll)。