C/汇编学习(一)----C&汇编(Windows)训练营第零期

本文作者分享了自学者如何通过博客记录学习进程,着重讲解了C/汇编的基础概念,如可移植性、编译器与连接器的作用,以及语法和语义错误的区别。此外,还详细介绍了四种运行库编译选项及其在Visual C++中的应用。
摘要由CSDN通过智能技术生成

学习目标:

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)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值