16位程序和32位程序????

请我去完成 2009-04-13 02:54:01
开门见上提问几个疑问:1 在32位系统编译生成的16位程序可以在32位系统运行吗???(不知道这句话矛盾不)
2 tc编译的程序是16位程序吗,为什么能在32位的xp运行???
3 16位程序和32位程序的追根原因是不是16位的函数库与32位的函数库造成的(暂且不谈硬件从软件角度考虑)???
4 只要能在32位系统运行的程序都是32位程序吗????不是请纠错
5 如果3成立的话那么64位的程序开发的话,32位的函数库就不能使用,是不是还要重新编写64位的函数库????不对请纠错
6跨平台的程序对32位系统和64位的系统敏感吗?????
请老师一一对题回答谢谢了小弟在线等候回复 (灌水的请自重谢谢了)
...全文
731 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaji2007 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kiffa 的回复:]
支持一下5楼。

从机器码的角度来比较16位程序和64位程序最容易说明这个问题。

首先,一切源代码最终都会转变成机器代码,也就是01序列,要想在某种机器上运行这些01序列,那么必须保证这个01序列在逻辑上属于该机器中处理器(cpu)指令集的一个子集。比如:


C/C++ code
int i = 3;

其汇编伪代码可能是:

C/C++ code
mov &……
[/Quote]


很好, 与我想的一样。
bobommsky 2009-12-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yefei999 的回复:]
TC2.0编译生成的EXE文件里的机器指令是实模式的机器指令,如果是16位的8086机上指令长度1-6个字节不等,寻址方式是由指令第2个字节的其中5位来编码,刚好32种排列组合(2的5次方)来表示8种寄存器寻址和24种内存寻址,第1个字节的最右边一位(0,1两种情况)来表示是字节寻址或字寻址。指令中的偏移地址(靠中后的字节内容)会先送进CPU内部一个地址加法器合成20位物理地址送上20个输入的地址译码器打开相应的内存字节或字单元的“门”进行数据的读写。
在WINDOWS下是32位保护模式,CPU(386)的全部32根地址线全部工作,OS通过EXE的头部信息识别出即将运行一个实模式指令格式的程序时就会通过让CPU中的指令译码器执行一条工作模式转换指令,让32根地址线的高12位“琐0”,段寄存器的用法也随即由选择子的用法回到提供段基值的用法。假如不切换到86实模式,这段TC编译生成的指令经过CPU保护模式下的译码执行后可能会得到不符合你本意的结果或者其中有无效的指令而发生错误。说白了就是当今的CPU应该有16位,32位和64位3种不同的工作模式,寄存器,地址译码器,指令译码器都有不同的工作方式,所以同样功能的程序其指令序列也不一样
[/Quote]
是的。以前遇到过汇编写的16位程序在windows下跑出错,就是因为16位子系统损坏的问题。
yefei999 2009-12-13
  • 打赏
  • 举报
回复
TC2.0编译生成的EXE文件里的机器指令是实模式的机器指令,如果是16位的8086机上指令长度1-6个字节不等,寻址方式是由指令第2个字节的其中5位来编码,刚好32种排列组合(2的5次方)来表示8种寄存器寻址和24种内存寻址,第1个字节的最右边一位(0,1两种情况)来表示是字节寻址或字寻址。指令中的偏移地址(靠中后的字节内容)会先送进CPU内部一个地址加法器合成20位物理地址送上20个输入的地址译码器打开相应的内存字节或字单元的“门”进行数据的读写。
在WINDOWS下是32位保护模式,CPU(386)的全部32根地址线全部工作,OS通过EXE的头部信息识别出即将运行一个实模式指令格式的程序时就会通过让CPU中的指令译码器执行一条工作模式转换指令,让32根地址线的高12位“琐0”,段寄存器的用法也随即由选择子的用法回到提供段基值的用法。假如不切换到86实模式,这段TC编译生成的指令经过CPU保护模式下的译码执行后可能会得到不符合你本意的结果或者其中有无效的指令而发生错误。说白了就是当今的CPU应该有16位,32位和64位3种不同的工作模式,寄存器,地址译码器,指令译码器都有不同的工作方式,所以同样功能的程序其指令序列也不一样
yefei999 2009-12-13
  • 打赏
  • 举报
回复
TC2.0编译生成的EXE文件里的机器指令是实模式的机器指令,如果是16位的8086机上指令长度1-6个字节不等,寻址方式是由指令第2个字节的其中5位来编码,刚好32种排列组合(2的5次方)来表示8种寄存器寻址和24种内存寻址,第1个字节的最右边一位(0,1两种情况)来表示是字节寻址或字寻址。指令中的偏移地址(靠中后的字节内容)会先送进CPU内部一个地址加法器合成20位物理地址送上20个输入的地址译码器打开相应的内存字节或字单元的“门”进行数据的读写。
在WINDOWS下是32位保护模式,CPU(386)的高12根地址线全部工作,OS通过EXE的头部信息识别出即将运行一个实模式指令格式的程序时就会通过让CPU中的指令译码器执行一条工作模式转换指令,让32根地址线的高12位“琐0”,段寄存器的用法也随即由选择子的用法回到提供段基值的用法。假如不切换到86实模式,这段TC编译生成的指令经过CPU保护模式下的译码执行后可能会得到不符合你本意的结果或者其中有无效的指令而发生错误。说白了就是当今的CPU应该有16位,32位和64位3种不同的工作模式,寄存器,地址译码器,指令译码器都有不同的工作方式,所以同样功能的程序其指令序列也不一样
bjwantong 2009-06-22
  • 打赏
  • 举报
回复
http://www.bjwtnd.cn/zgc
axx1611 2009-05-20
  • 打赏
  • 举报
回复
建议楼主google一下“虚拟8086模式”
实际上32位系统能跑16位程序相当于windows内建了一个16位虚拟机
而且这个“虚拟8086模式”不是windows特有的,是intel x86处理器的一个扩展功能
kiffa 2009-04-16
  • 打赏
  • 举报
回复
支持一下5楼。

从机器码的角度来比较16位程序和64位程序最容易说明这个问题。

首先,一切源代码最终都会转变成机器代码,也就是01序列,要想在某种机器上运行这些01序列,那么必须保证这个01序列在逻辑上属于该机器中处理器(cpu)指令集的一个子集。比如:

int i = 3;

其汇编伪代码可能是:
mov &i, 3 // 获取i的地址&i,然后把3写入这个地址


在64位机器上,其机器码可能是:
// 使用了绝对地址的简化版本
01 0010101101111010 0000000000000011 // 01表示指令功能(mov),0010101101111010表示&i地
// 址,0000000000000011表示整数3

而在16位机器上,其机器码可能是:
1 1001 0011 // 1表示指令功能(mov),1001表示&i地址,0011表示整数3


那么只要一个编译器包(不太严谨的自定义词,指包含了编译器、汇编器、连接器等的一个“包”)可以把int i = 3这句代码转换成01 0010101101111010 0000000000000011,这个编译器包产生的二进制代码就可以在64位机器上运行;同样,如果编译器包产生的是1 1001 0011,那么就可以在16位系统上运行。

而01 0010101101111010 0000000000000011不能在16位机器上运行,因为16位cpu根本就不认识这条指令;同理,1 1001 0011也不能在64位机器上运行(更确切的说是不能在64位机器的64位模式下运行,注:对此条我没有足够的自信,因为不清楚intel对向前兼容所做的处理,有误的话一定要指正。我的硬件体系知识还停留在32位单核上。)。

要想让01 0010101101111010 0000000000000011在16位机器上跑,除非有一个中间程序将01 0010101101111010 0000000000000011转换成1 1001 0011(或者cpu有独特的办法来兼容这种指令)。这正是tc编译出的16位程序可以在32位xp上跑的最基本原因,xp可以模拟出一个16位环境(同上:有误一定要指正)。

所以,即使是16位系统上的一个编译器包,也是可以编译出用于64位系统的可执行文件的,只要他把int i = 3 翻译成01 0010101101111010 0000000000000011就行了。

总之,编译器包是最直接的决定因素,编译器包能产生怎样的机器代码,就可以在怎样的机器平台上运行。而编译器包能产生怎样的代码,是不受编译器包本身所处平台限制的,也就是上面说的16位系统上的一个编译器包是可以产生64位的程序的。编译器包的抽象层次是处于硬件层次之上的。

从抽象概念上讲,机器平台的基本区别就在于处理器指令集的区别,那么,不同处理器指令集的区别具体体现在哪些方面呢?寻址空间是一个区别(16位、32位、64位一般指这个区别),不同家族的cpu本身也有区别(比如intel的IA32系列和IBM的power pc系列),同一家族内的cpu也有区别(286、386、双核等,一般向前兼容).

最后关于数据类型大小,一个int在16位、32位、64位下的大小(所占字节数)有没有区别?有什么区别?
1,语言标准是最根本的约束,对于int,标准只要求sizeof(short) <= sizeof(int) <= sizeof(long),同时还要保证short至少有16位,long至少有32位(TCPL++, 3rd特别版, Bj)。

2,其他的就由编译器自己去决定了,所以理论上来说即使在64位系统上,编译器也可以实现一个16位的int,这是完全合乎标准的(而且至少在Intel的cpu上是能够实现的)。

3,具体如何实现,由编译器综合各种因素自己权衡,因此,16位系统上int为16位,32位系统上int为32位,64位系统上int为64位,只是一种普遍的做法,而并非唯一的做法。

4,即使是指针,也不一定在16位系统上为16位,32位系统上为32位,64位系统上为64位。这个世界上甚至存在支持不定长的指针的系统,在这些机器上,char *和int * 的大小可以不相等。(看书上说的,自己没接触过。)

5,因此,最好只使用类型的抽象意义,不要依赖于其底层实现细节。
dttlgotv 2009-04-15
  • 打赏
  • 举报
回复
16位系统和32位系统的区别是寻址的不同,一个是16位寻址,一个是32位寻址;因此存储单元大小也不一样,一个是16位,一个是32位。

所以16为程序能在32位上运行,只是前面16位为0而已,但32位的不能再16位上运行。
小赌移情 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 cuiyubing819 的帖子:]
开门见上提问几个疑问:1 在32位系统编译生成的16位程序可以在32位系统运行吗???(不知道这句话矛盾不)
2 tc编译的程序是16位程序吗,为什么能在32位的xp运行???
3 16位程序和32位程序的追根原因是不是16位的函数库与32位的函数库造成的(暂且不谈硬件从软件角度考虑)???
4 只要能在32位系统运行的程序都是32位程序吗????不是请纠错
5 如果3成立的话那么64位的程序开发的话,32位的函数库就不能使用,是不是还要…
[/Quote]

1.32位系統一般都有16位的兼容模式,只不過不是正版的16位而已,可以運行一些,不能運行一些.
2.tc輸出是16位程序, 同上.
3.對.可以看Programming Windows 中關於Windows API的講解.
4.不是,看1.
5.是不能用,但是模擬層可以解決大部分問題.
Dinelgua 2009-04-13
  • 打赏
  • 举报
回复
1 在32位系统编译生成的16位程序可以在32位系统运行吗???(不知道这句话矛盾不)
肯定可以,自己编译生成的 一定可以在自身运行

2 tc编译的程序是16位程序吗,为什么能在32位的xp运行???
同上

3 16位程序和32位程序的追根原因是不是16位的函数库与32位的函数库造成的(暂且不谈硬件从软件角度考虑)???
应该跟函数库没关系,编译时对不同数据类型大小的解释造成的吧

4 只要能在32位系统运行的程序都是32位程序吗????不是请纠错
不是,64位的也可能再32为系统跑,只要没有使用冲突的变量就可以,例如int再32位是4字节,64为下也是4字节
那么
void main(){ int i = 100; cout<< i;}这样再64位环境编译的程序一样可以再32为下运行

5 如果3成立的话那么64位的程序开发的话,32位的函数库就不能使用,是不是还要重新编写64位的函数库????不对请纠错
函数库中如果使用了冲突的数据类型 就需要调整

6 跨平台的程序对32位系统和64位的系统敏感吗?????
敏感,可以跨平台的程序不一定能够跨32位与64位
theone11 2009-04-13
  • 打赏
  • 举报
回复
楼主应该好好复习一下编译原理这门课了……明显连程序是怎么一回事都没有搞清楚

1.任何16位程序都只能在兼容16位的32位系统运行,在什么系统上编译程序无关紧要.难道你认为在嵌入式设备上运行的程序都是在嵌入式设备上编译的?

2.XP提供有限的16位程序兼容支持

3.函数库是什么?从源代码层面,多少位的函数库没有区别,除非你的函数库是用汇编写的.

4.你都问了问题2还问这个问题干啥

5.要明白这个问题,先搞清楚二进制可执行文件和源代码的区别吧

6.有没有影响就要看你的程序到底"跨"了什么平台,如果没有提供64位系统的支持就不行
Proteas 2009-04-13
  • 打赏
  • 举报
回复
不知道,没写过16位的程序。
weir75034 2009-04-13
  • 打赏
  • 举报
回复
低位在高位系统上一般是可以运行的,因为一般操作系统是向前兼容的。如16位的程序拿到32位上,因为32位系统会模拟一个16位的环境。
至于16位、32位应该是地址的最大偏移量是16位或32位的吧,例如32位系统最大虚拟地址空间为4G(自己的理解具体自己查一下吧),反过来,高位到低位就一般不兼容,关键看系统支不支持
ialufiac 2009-04-13
  • 打赏
  • 举报
回复
答:
1 可以
2 TC是16位,为什么能在32位XP运行,如果32位是你开发的,你肯定也会支持
3 不知道
4 看第2个答案
5 不懂
6 既然是可以跨平台,安全自然可靠
WOBUGUAN 2009-04-13
  • 打赏
  • 举报
回复
66分那是每题11分吗?
我仿佛记得TC是可以在386机上跑的,而386是32位的,所以在奔腾上也应该没什么问题
包括如下100例有关的VHDL描述文件,但解压后只有94例,其他部分错误 第1例?带控制端口的加法器 袁 媛(1) 第2例?无控制端口的加法器 袁 媛(4) 第3例?乘法器 袁 媛(6) 第4例?比较器 袁 媛(8) 第5例?二路选择器 袁 媛(11) 第6例?寄存器 袁 媛(13) 第7例?移寄存器 袁 媛(16) 第8例?综合单元库 袁 媛(22) 第9例?七值逻辑与基本数据类型 袁 媛(29) 第10例?函数 袁 媛(32) 第11例?七值逻辑线或分辨函数 袁 媛(35) 第12例?转换函数 袁 媛(38) 第13例?左移函数 袁 媛(40) 第14例?七值逻辑程序包 袁 媛(42) 第15例?四输入多路器 陈东瑛(51) 第16例?目标选择器 吴清平(57) 第17例?奇偶校验器 陈东瑛(61) 第18例?映射单元库及其使用举例 陈东瑛(69) 第19例?循环边界常数化测试 陈东瑛(75) 第20例?保护保留字 袁 媛(77) 第21例?进程死锁 刘沁楠(79) 第22例?振荡与死锁 袁 媛(81) 第23例?振荡电路 刁岚松(83) 第24例?分辨信号与分辨函数 袁 媛(87) 第25例?信号驱动源 刘沁楠(92) 第26例?属性TRANSACTION和分辨信号 陈东瑛(96) 第27例?块保护及属性EVENT,STABLE 陈东瑛(101) 第28例?形式参数属性的测试 刘沁楠(104) 第29例?进程和并发语句 刁岚松(107) 第30例?信号发送与接收 刁岚松(111) 第31例?中断处理优先机制建模 吴清平(113) 第32例?过程限定 刘沁楠(116) 第33例?整数比较器及其测试 刘沁楠(119) 第34例?数据总线的读写 刁岚松(129) 第35例?基于总线的数据通道 李 春(134) 第36例?基于多路器的数据通道 李 杰(148) 第37例?四值逻辑函数 袁 媛(152) 第38例?四值逻辑向量按或运算 刁岚松(156) 第39例?生成语句描述规则结构 袁 媛(159) 第40例?带类属的译码器描述 袁 媛(164) 第41例?带类属的测试平台 袁 媛(169) 第42例?行为与结构的混合描述 袁 媛(171) 第43例?四寄存器 .刘沁楠(174) 第44例?寄存/计数器 袁 媛(185) 第45例?顺序过程调用 陈东瑛(189) 第46例?VHDL中generic缺省值的使用 王作建(191) 第47例?无输入元件的模拟 王作建(196) 第48例?测试激励向量的编写 袁 媛(201) 第49例?delta延迟例释 吴清平(206) 第50例?惯性延迟分析 吴清平(210) 第51例?传输延迟驱动优先 陈东瑛(213) 第52例?多倍(次)分频器 刁岚松(216) 第53例?三计数器与测试平台 刘沁楠(220) 第54例?分秒计数显示器的行为描述 陈东瑛(226) 第55例?地址计数器 陈东瑛(234) 第56例?指令预读计数器 吴清平(242) 第57例?加、减、乘指令的译码和操作 吴清平(245) 第58例?2-4译码器结构描述 刘沁楠(248) 第59例?2-4译码器行为描述 吴清平(255) 第60例?转换函数在元件例示中的应用 王作建(258) 第61例?基于同一基类型的两分辨类型的赋值相容问题 王作建(261) 第62例?最大公约数的计算 刁岚松(266) 第63例?最大公约数七段显示器编码 吴清平(269) 第64例?交通灯控制器 吴清平(272) 第65例?空调系统有限状态自动机 刁岚松(276) 第66例?FIR滤波器 谢 巍(280) 第67例?五阶椭圆滤波器 刘沁楠(290) 第68例?闹钟系统的控制器 张东晓(302) 第69例?闹钟系统的译码器 陈东瑛(311) 第70例?闹钟系统的移寄存器 陈东瑛(315) 第71例?闹钟系统的闹钟寄存器和时间计数器 陈东瑛(317) 第72例?闹钟系统的显示驱动器 陈东瑛(322) 第73例?闹钟系统的分频器 陈东瑛(325) 第74例?闹钟系统的整体组装 张东晓(327) 第75例?存储器 李 春(333) 第76例?电机转速控制器 张俭锋(337) 第77例?神经元计算机 袁 媛(343) 第78例?Am2901四微处理器的ALU输入 韩 曙(347) 第79例?Am2901四微处理器的ALU 韩 曙(353) 第80例?Am2901四微处理器的RAM 韩 曙(359) 第81例?Am2901四微处理器的寄存器 韩 曙(363) 第82例?Am2901四微处理器的输出与移 韩 曙(365) 第83例?Am2910四程序控制器中的多路选择器 韩 曙(370) 第84例?Am2910四程序控制器中的计数器/寄存器 韩 曙(374) 第85例?Am2910四程序控制器的指令计数器 韩 曙(379) 第86例?Am2910四程序控制器的堆栈 韩 曙(382) 第87例?Am2910四程序控制器的指令译码器 韩 曙(390) 第88例?可控制计数器 韩 曙(399) 第89例?四超前进加法器 韩 曙(406) 第90例?实现窗口搜索算法的并行系统(1)--协同处理器 李 杰(410) 第91例?实现窗口搜索算法的并行系统(2)--序列存储器 李 杰(416) 第92例?实现窗口搜索算法的并行系统(3)--字符串存储器 李 春(419) 第93例?实现窗口搜索算法的并行系统(4)--顶层控制器 李 春(422) 第94例?MB86901流水线行为描述组成框架 石 峰(428) 第95例?MB86901寄存器文件管理的描述 石 峰(434) 第96例?MB86901内ALU的行为描述 石 峰(437) 第97例?移指令的行为描述 石 峰(440) 第98例?单周期指令的描述 石 峰(442) 第99例?多周期指令的描述 石 峰(445) 第100例? MB86901流水线行为模型 石 峰(458)
C 语言编程常见问题解答 【作者】[美]Paul S.R. Chisholm 译:张芳妮 吕 波 【出版社】清华大学出版社 C语言编程常见问题解答(目录) 第l章 C语言 1. 1 什么是局部程序块(local block)? 1. 2 可以把变量保存在局部程序块中吗? 1. 3 什么时候用一条switch语句比用多条if语句更好? 1. 4 switch语句必须包含default分支吗? 1. 5 switch语句的最后—个分支可以不要break语句吗? 1. 6 除了在for语句中之外,在哪些情况下还要使用逗号运算? 1. 7 怎样才能知道循环是否提前结束了? 1. 8 goto,longjmp()和setjmp()之间有什么区别? 1. 9 什么是左值(lvaule)? 1. 10 数组(array)可以是左值吗? 1. 11 什么是右值(rvaule)? 1. 12 运算符的优先级总能保证是“自左至右”或“自右至左”的顺序吗? 1. 13 ++var和var++有什么区别? 1. 14 取模运算符(modulusoperator)“%”的作用是什么? 第2章 变量和数据存储 2. 1 变量存储在内存(memory)中的什么地方? 2. 2 变量必须初始化吗? 2. 3 什么是页抖动(pagethrashing)? 2. 4 什么是const指针? 2. 5 什么时候应该使用register修饰符?它真的有用吗? 2. 6 什么时候应该使用volatile修饰符? 2. 7 一个变量可以同时被说明为const和volatile吗? 2. 8 什么时候应该使用const修饰符? 2. 9 浮点数比较(floating—point comparisons)的可靠性如何? 2. 10 怎样判断一个数字型变量可以容纳的最大值? 2. 11 对不同类型的变量进行算术运算会有问题吗? 2. 12 什么是运算符升级(operator promotion)? 2. 13 什么时候应该使用类型强制转换(typecast)? 2. 14 什么时候不应该使用类型强制转换(typecast)? 2. 15 可以在头文件中说明或定义变量吗? 2. 16 说明一个变量和定义一个变量有什么区别? 2. 17 可以在头文件中说明static变量吗? 2.18 用const说明常量有什么好处? 第3章 排序与查找 排 序 查 找 排序或查找的性能 3.1 哪一种排序方法最方便? 3.2 哪一种排序方法最快? 3.3 当要排序的数据集因太大而无法全部装入内存时,应怎样排序? 3.4 哪一种查找方法最方便? 3.5 哪一种查找方法最快? 3.6 什么是哈希查找? 3.7 怎样对链表进行排序? 3.8 怎样查找链表中的数据? 第4章 数据文件 4.1 当errno为一个非零值时,是否有错误发生? 4.2 什么是流(stream)? 4.3 怎样重定向—个标准流? 4.4 怎样恢复一个重定向了的标准流? 4.5 stdout能被强制打印到非屏幕设备上吗? 4.6 文本模式(text mode)和二进制模式(binary mode)有什么区别? 4.7 怎样判断是使用流函数还是使用低级函数? 4.8 怎样列出某个目录下的文件? 4.9 怎样列出—个文件的日期和时间? 4.10 怎样对某个目录下的文件名进行排序? 4.1l 怎样判断一个文件的属性? 4.12 怎样查看PATH环境变量? 4.13 怎样打开一个同时能被其它程序修改的文件? 4.14 怎样确保只有你的程序能存取一个文件? 4.15 怎样防止其它程序修改你正在修改的那部分文件内容? 4.16 怎样—次打开20个以上的文件? 4.17 怎样避开"Abort,Retry,Fail"消息? 4.18 怎样读写以逗号分界的文本? 第5章 编译预处理 5.1 什么是宏(macro)?怎样使用宏? 5.2 预处理程序(preprocessor)有什么作用? 5.3 怎样避免多次包含同—个头文件? 5.4 可以用#include指令包含类型名不是“.h”的文件吗? 5.5 用#define指令说明常量有什么好处? 5.6 用enum关键字说明常量有什么好处? 5.7 与用#define指令说明常量相比,用enum关键字说明常量有什么好处? 5.8 如何使部分程序在演示版中失效? 5.9 什么时候应该用宏代替函数? 5.10 使用宏更好,还是使用函数更好? 5.11 在程序中加入注释的最好方法是什么? 5.12 #include和#include“file”有什么不同? 5.13 你能指定在编译时包含哪一个头文件吗? 5.14 包含文件可以嵌套吗? 5.15 包含文件最多可以嵌套几层? 5.16 连接运算符“##”有什么作用? 5.17 怎样建立对类型敏感的宏? 5.18 什么是标准预定义宏? 5.19 怎样才能使程序打印出发生错误的行号? 5.20 怎样才能使程序打印出发生错误的源文件名? 5.2l 怎样判断一个程序是用C编译程序环是用C++编译程序编译的? 5.22 预处理指令#pragma有什么作用? 5.23 #line有什么作用? 5.24 标准预定义宏_FILE_有什么作用? 5.25 怎样在程序中打印源文件名? 5.26 标准预定义宏_LINE_有什么作用? 5.27 怎样在程序中打印源文件的当前行号? 5.28 标准预定义宏_DATE_和_TIME_有什么作用? 5.29 怎样在程序中打印编译日期和时间? 5.30 怎样判断一个程序是否遵循ANSIC标准? 5.31 怎样取消一个已定义的宏? 5.32 怎样检查一个符号是否已被定义? 5.33 C语言提供哪些常用的宏? 第6章 字符串操作 6.l 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用? 6.2 怎样删去字符串尾部的空格? 6.3 怎样删去字符串头部的空格? 6.4 怎样使字符串右对齐? 6.5 怎样将字符串打印成指定长度? 6.6 怎样拷贝字符串的一部分? 6.7 怎样将数字转换为字符串? 6.8 怎样将字符串转换为数字? 6.9 怎样打印字符串的一部分? 6.10 怎样判判断两个字符串是否相同? 第7章 指针和内存分配 7.1 什么是间接引用(indirection)? 7.2 最多可以使用几层指针? 7.3 什么是空指针? 7.4 什么时候使用空指针? 7.5 什么是void指针? 7.6 什么时候使用void指针? 7.7 两个指针可以相减吗?为什么? 7.8 把一个值加到一个指针上意味着什么? 7.9 NULL总是被定义为0吗? 7.10 NULL总是等于0吗? 7.11 用指针作if语句的条件表达式意味着什么? 7.12 两个指针可以相加吗?为什么? 7.13 怎样使用指向函数的指针? 7.14 怎样用指向函数的指针作函数的参数? 7.15 数组的大小可以在程序运行时定义吗? 7.16 用malloc()函数更好还是用calloc()函数更好? 7.17 怎样说明一个大于64KB的数组? 7.18 far和near之间有什么区别? 7.19 什么时候使用far指针? 7.20 什么是栈(stack)? 7.21 什么是堆(heap)? 7.22 两次释放一个指针会导致什么结果? 7.23 NULL和NUL有什么不同? 7.24 为什么不能给空指针赋值?什么是总线错误、内存错误和内存信息转储? 7.25 怎样确定一块已分配的内存的大小? 7.26 free()函数是怎样知道要释放的内存块的大小的? 7.27 可以对void指针进行算术运算吗? 7.28 怎样打印一个地址? 第8章 函数 8.1 什么时候说明函数? 8.2 为什么要说明函数原型? 8.3 一个函数可以有多少个参数? 8.4 什么是内部函数? 8.5 如果一个函数没有返回值,是否需要加入return语句? 8.6 怎样把数组作为参数传递给函数? 8.7 在程序退出main()函数之后,还有可能执行一部分代码吗? 8.8 用PASCAL修饰符说明的函数与普通C函数有什么不同? 8.9 exit()和return有什么不同? . 第9章 数组 9.1 数组的下标总是从0开始吗? 9.2 可以使用数组后面第—个元素的地址吗? 9.3 为什么要小心对待于数组后面的那些元素的地址呢? 9.4 在把数组作为参数传递给函数时,可以通过sizeof运算符告诉函数数组的大小吗? 9.5 通过指针或带下标的数组名都可以访问数组中的元素,哪一种方式更好呢? 9.6 可以把另外一个地址赋给一个数组名吗? 9.7 array_name和&array;_name有什么不同? 9.8 为什么用const说明的常量不能用来定义一个数组的初始大小? 9.9 字符串和数组有什么不同? 第10章 (bit)和字节(byte) 10.1 用什么方法存储标志(flag)效率最高? 10.2 什么是“屏蔽(bit masking)”? 10.3 域(bit fields)是可移植的吗? 10.4 移和乘以2这两种方式中哪一种更好? 10.5 什么是高字节(high-order byte)和低字节(low-order byte)? 10.6 1632的数是怎样存储的? 第11章 调试 11.1 如果我运行的程序挂起了,应该怎么办? 11.2 如何检测内存漏洞(leak)? 11.3 调试程序的最好方法是什么? 11.4 怎样调试TSR程序? 11.5 怎样获得一个能报告条件失败的程序? 第12章 标准库函数 12.1 为什么应该使用标准库函数而不要自己编写函数? 12.2 为了定义我要使用的标准库函数,我需要使用哪些头文件? 12.3 怎样编写参数数目可变的函数? 12.4 独立(free—standing)环境和宿主(hosted)环境之间有什么区别? 12.5 对字符串进行操作的标准库函数有哪些? 12.6 对内存进行操作的标准库函数有哪些? 12.7 怎样判断一个字符是数字、字母或其它类别的符号? 12.8 什么是“局部环境(locale)”? 12.9 有没有办法从一个或多个函数中跳出? 12.10 什么是信号(signal)?用信号能做什么? 12.11 为什么变量名不能以下划线开始? 12.12 为什么编译程序提供了两个版本的malloc()函数? 12.13 适用于整数和浮点数的数学函数分别有哪些? 12.14 什么是多字节字符(multibyte characters)? 12.15 怎样操作由多字节字符组成的字符串? 第13章 时间和日期 13.1 怎样把日期存储到单个数字中?有这方面的标准吗? 13.2 怎样把时间存储到单个数字中?有这方面的标准吗? 13.3 为什么定义了这么多不同的时间标准? 13.4 存储日期的最好方法是哪一种? 13.5 存储时间的最好方法是哪一种? 第14章 系统调用 14.1 怎样检查环境变量(environment variables)的值? 14.2 怎样在程序中调用DOS函数? 14.3 怎样在程序中调用BIOS函数? 14.4 怎样在程序中存取重要的DOS内存置? 14.5 什么是BIOS? 14.6 什么是中断? 14.7 使用ANSI函数和使用BIOS函数,哪种方式更好? 14.8 可以通过BIOS把显示模式改为VGA图形模式吗? 14.9 运算符的优先级总能起作用吗(从左至右,从右至左)? 14.10 函数参数的类型必须在函数头部或紧跟在其后说明吗?为什么? 14.11 程序应该总是包含main()的一个原型吗? 14.12 main()应该总是返回一个值吗? 14.13 可以通过BIOS控制鼠标吗? 第15章 可移植性 15.1 编译程序中的C++扩充功能可以用在C程序中吗? 15.2 C++和C有什么区别? 15.3 在C程序中可以用“∥”作注释符吗? 15.4 char,short,int和long类型分别有多长? 15.5 高优先(big-endian)与低优先(little—endian)的计算机有什么区别? 第16章 ANSI/ISO标准 16.1 运算符的优先级总能起作用吗? 16.2 函数参数类型必须在函数参数表中或紧跟其后的部分中说明吗? 16.3 程序中必须包含main()的原型吗? 16.4 main()应该总是返回一个值吗? 第17章 用户界面——屏幕和键盘 17.1 为什么直到程序结束时才看到屏幕输出? 17.2 怎样在屏幕上定光标? 17.3 向屏幕上写数据的最简单的方法是什么? 17.4 向屏幕上写文本的最快的方法是什么? 17.5 怎样防止用户用Ctr+Break键中止程序的运行? 17.6 怎样才能只得到一种特定类型的数据,例如字符型数据? 17.7 为什么有时不应该用scanf()来接收数据? 17.8 怎样在程序中使用功能键和箭头键? 17.9 怎样防止用户向一个内存区域中输入过多的字符? 17.10 怎样用0补齐一个数字? 17.11 怎样才能打印出美元一美分值? 17.12 怎样按科学记数法打印数字? 17.13 什么是ANSI驱动程序? 17.14 怎样通过ANSI驱动程序来清屏? 17.15 怎样通过ANSI驱动程序来存储光标置? 17.16 怎样通过ANSI驱动程序来恢复光标置? 17.17 怎样通过ANSI驱动程序来改变屏幕颜色? 17.18 怎样通过ANSI驱动程序来写带有颜色的文本? 17.19 怎样通过ANSI驱动程序来移动光标? 第18章 程序的编写和编译 18.1 程序是应该写成一个源文件还是多个源文件? 18.2 各种存储模式之间有什么区别? 18.3 最常使用的存储模式有哪些? 18.4 应该使用哪种存储模式? 18.5 怎样生成一个".COM"文件? 18.6 ".COM"文件有哪些地方优于".EXE"文件? 18.7 当一个库被连接到目标上时,库中的所有函数是否都会被加到一个".EXE"文件中? 18.8 可以把多个库函数包含在同一个源文件中吗? 18.9 为什么要建立一个库? 18.10 如果一个程序包含多个源文件,怎样使它们都能正常工作? 18.11 连接过程中出现"DGROUP:group exceeds 64K"消息是怎么回事? 18.12 怎样防止程序用尽内存? 18.13 如果程序太大而不能在DOS下运行,怎样才能使它在DOS下运行呢? 18.14 怎样才能使DOS程序获得超过640KB的可用内存呢? 18.15 近程型(near)和远程型(far)的区别是什么? 第19章编程风格和标准 19.1 可以在变量名中使用下划线吗? 19.2 可以用变量名来指示变量的数据类型吗? 19.3 使用注释会影响程序的速度、大小或效率吗? 19.4 使用空白符会影响程序的速度、大小或效率吗? 19.5 什么是骆驼式命名法? 19.6 较长的变量名会影响程序的速度、大小或效率吗? 19.7 给函数命名的正确方法是什么? 19.8 使用大括号的正确方法是什么? 19.9 一个变量名应该使用多少个字母?ANSI。标准允许有多少个有效字符? 19.10 什么是匈牙利式命名法?应该使用它吗? 19.11 什么是重复处理(iterative processing)? 19.12 什么是递归(recursion)?怎样使用递归? 19.13 在C语言中,表示真和假的最好方法是什么? 19.14 空循环(null loops)和无穷循环(infinite loops)有什么区别? 19.15 continue和break有什么区别? 第20章 杂项(Miscellaneous) 20.1 怎样获得命令行参数? 20.2 程序总是可以使用命令行参数吗? 20.3“异常处理(exception handling)”和“结构化异常处理(structured exception handling)”有什么区别? 20.4 怎样在DOS程序中建立一个延时器(delay timer)? 20.5 Kernighan和Ritchie是谁? 20.6 怎样产生随机数? 20.7 什么时候应该使用32编译程序? 20.8 怎样中断一个Windows程序? 20.9 为什么要使用静态变量? 20.10 怎样在一个程序后面运行另一个程序? 20.11 怎样在一个程序执行期间运行另一个程序? 20.12 怎样把数据从一个程序传给另一个程序? 20.13 怎样判断正在运行的程序所在的目录? 20.14 怎样找到程序中的重要文件(数据库,配置文件,等等)? 20.15 本书的有些例子程序有许多缺陷,为什么不把它们写得更好? 20.16 怎样使用Ctr+Break失效? 20.17 可以使热启动(Ctrl+Alt+Delete)失效吗? 20.18 怎样判断一个字符是否是一个字母? 20.19 怎样判断一个字符是否是一个数字? 20.20 怎样把一个十六进制的值赋给一个变量? 20. 21 怎样把一个八进制的值赋给一个变量? 20.22 什么是二进制? 20.23 什么是八进制? 20.24 什么是十六进制? 20.25 什么是换码符(escape characters)? 附 录 常用函数的包含文件

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧