主题:[原创]TC2.0帮助文档翻译系列
部分TC2.0 helpme.doc翻译
TC2.0帮助文档有3个吧,这个是helpme.doc,选择翻译了比较重要的或不常见的部分。有些地方看不大懂,原文照抄了下来:
TURBO C 2.0: ANSWERS TO COMMON QUESTIONS
G e t t i n g S t a r t e d
----------------------------------------------------------------------
Q. TC.EXE和TCC.EXE的区别是什么?
A. TC包括两个“编译器”,一个综合环境叫做TC.EXE,另一个命令行编译器叫做TCC.EXE。综合环境本质上是带有多功能编辑器、连接器和debugger的一个命令行编译器。参考《TC使用指南》。
Q. 我怎样创建配置文件?
A. 当运行INSTALL程序时可以创建为TCC的设置的名为TURBOC.CFG的文件。这个文件仅仅是一个ASCII字符文件,你可以用文本编辑器改变它。它包括库和头文件的路径信息贡TCC使用。INSTALL并不创建TCCONFIG.TC文件,因为TC的安装目录就是默认的路径。你可以在运行TC时设置你的选项,然后按Alt-O/S保存。
Q. 为什么我得到这样的消息:Linker Error: Unable to open input file 'C0x.OBJ'?
A. 连接器linker在TC的库目录下查找TC的启动文件和库文件。这个设置在Options/Directories菜单下。
安装程序初始化这个选项到拷贝有启动文件和库文件的路径下。
Q. 为什么当我#i nclude <stdio.h>时,TC报告:"Unable to open include file 'stdarg.h'"?
A. 最有可能是你打开的文件太多,超过了dos的限定。在DOS的CONFIG.SYS里增加一行FILES=20,允许dos同时打开20个文件。CONFIG.SYS会在重启后生效。参考《IBM DOS手册》。
Q. 为什么连接器告诉我all the graphics library routines are undefined(所有的图形库例程都未定义)?
A. IDE中Options/Linker/Graphics Library这个选项必须设成“ON”,如果你使用TC图形库函数并且没有在工程文件里加入GRAPHICS.LIB的话。例如编译BGIDEMO(译注:TC自带的图形功能的DEMO程序),需在命令行下键入:TCC BGIDEMO.C GRAPHICS.LIB<Enter>
Q. How do I change the colors of the editor and menus in TC?
A. The utility TCINST.EXE allows you to customize your colors.
Q. 怎样改变TC中编辑器和菜单的颜色?
A. TCINST.EXE允许你自定义这些颜色。
Q. 我怎样在打印机上打印一个代码串?
A. 在TC中按<Ctrl><K><P>,将会打印一个标记块。如果没有标记块就会打印整个代码。
G e n e r a l I / O
----------------------------------------------------------------------
Q. 在cprintf()函数里用'\n'并没有使光标回到下一行开头,它只是移到了正下方。
A. cprintf()不把'\n'解释成行终结符/起始符的组合,它仅作为起始符。想换行需要手工强制插入行终
止符:cprintf("\n\r");
Q. 我怎样将TC里的程序打印出来?
A. TC使用了一个文件指针(stdprn 译注:作为打印机的输出流),它在STDIO.H中定义。你需要这样打开stdprn:
#i nclude <stdio.h>
main()
{
fprintf(stdprn, "Hello, world\n");
}
注意如果你的打印机是行缓冲的,将以'\n'截断输出。
Q. How do I print a long double?
A. Use the "%Lf" format.
long double ldbl = 1E500;
printf("%Lf", ldbl);
Q. 怎样输出长整形数?
A. 使用"%Lf"格式符。
long double ldbl = 1E500;
printf("%Lf", ldbl);
Q. 怎样创建一个COM文件?
A. DOS3.2以前的版本都包括EXE2BIN这个命令用来把EXE转换成COM。对于没有EXE2BIN的用户,TC命令行连接器-TLINK的/t选项能够取而代之创建COM文件。例如:
tcc -mt -lt tiny
将会创建TINY.COM代替TINY.EXE。
EXE转COM有明确的限制。在《IBM DOS系统手册》里可查到。
TC的TINY(微)模式和COM形式兼容,但用到符点例程的程序不能够转换。
G r a p h i c s
----------------------------------------------------------------------
Q. 为什么当我使用图形函数时得到错误信息:BGI Error: graphics not initialized (use 'initgraph')?我的程序明明已经调用了initgraph().
A. 想知道为什么初始化函数出错,可以检查graphresult()的返回值。例如:
#i nclude <graphics.h>
main()
{
int gerr; /* graphics error */
int gdriver = DETECT, gmode;
/* Initialize graphics using auto-detection and look
for the .BGI and .CHR files in the C:\TURBOC directory.
*/
initgraph(&gdriver, &gmode, "C:\\TURBOC");
if ((gerr = graphresult()) != grOk)
{
printf("Error : %s\n", grapherrormsg(gerr));
exit(1);
}
:
}
M a t h / F l o a t i n g P o i n t
----------------------------------------------------------------------
Q. 我怎样捕捉浮点错误?
A. 在TC指南中查看signal() 和 matherr()两个函数。signal()函数可能用来捕捉80x87协处理器或80x87仿真器。matherr()函数捕捉的是math函数库的错误。
L i n k e r E r r o r s
----------------------------------------------------------------------
Q. 为什么我得到Linker Error: Undefined symbol '_main' in module C0 的信息?
A. 每个C程序必须调用main()函数。这是你程序执行的第一个函数。The function name must be all in lower case.如果你采用多文件编译,工程的所有源文件中有且只能有一个main()函数。
Q. 我在用TC连接汇编语言时,编译器报告说所有的函数未定义。
A. 确保在所有的汇编函数名前都加了下划线'_'。Your assembly language program should be assembled with Case Sensitivity.
O t h e r Q u e s t i o n s
----------------------------------------------------------------------
Q. 我怎样改变栈的大小?
A. TC中栈的大小是由运行时全局变量_stklen决定的。如想把大小改成10000字节,需在程序中包括下面一行:
extern unsigned _stklen = 10000;
这个声明不能出现在任何函数内部。默认的栈大小是4096字节(4K)。
Q. 我在程序运行是得到了一条 'Stack Overflow!'的消息,怎么办?
A. 你可以使用下面的处理方法使栈增加。栈的溢出通常是由局部数据或递归函数引起的。你可以通过对变量静态类型的声明来生命栈的数量。
main() main()
{ {
char x[5000]; --> static char x[5000];
: :
} }
Q. 我的程序出现 'Null pointer assignment',什么意思?
A. 在TC小数据模式返回到DOS前,会检查数据段的开头是否有误。这个消息警告,你可能使用了未定义的指针或程序的内存被不正确的使用。
Q. 为什么TCC生成的.EXE文件比TC的小?
A. TC的默认配置是,在EXE创建时包括debugging信息,然而TCC并没有这么做。如果你不想产生debugging信息,可以在IDE中按Alt-D/S/N关闭此功能。
Q. 为什么会因为DOS.H导致 错误信息:"declaration syntax error"?
A. 想把TC关键字用于特别用途的时候,必须把"Ansi keywords only"关上。
Q. 我能为全局变量声明64K以上的内存吗?
A. 在Tiny, Small, Medium, Compact 和 Large几个内存模式下只要用static静态变量就好了。在Huge模式下,每个source module(代码模块)都有64K。
Q. 我怎样声明才能使数组超过64K?
A. 更大的数组必须在建立堆之外。例如1024 * 128的二维数组:
#i nclude <alloc.h>
char (huge *array)[128];
:
main()
{
:
array = farcalloc(sizeof(*array), 1024);
:
}
The array can be accessed with the same code as an array not
allocated off the heap.
必须使用"huge"关键字声明"array",因为只有huge指针能超越64K的地址。注意:下划线'_'被用于所有外部符号的prepended(预处理)。
TC2.0帮助文档有3个吧,这个是helpme.doc,选择翻译了比较重要的或不常见的部分。有些地方看不大懂,原文照抄了下来:
TURBO C 2.0: ANSWERS TO COMMON QUESTIONS
G e t t i n g S t a r t e d
----------------------------------------------------------------------
Q. TC.EXE和TCC.EXE的区别是什么?
A. TC包括两个“编译器”,一个综合环境叫做TC.EXE,另一个命令行编译器叫做TCC.EXE。综合环境本质上是带有多功能编辑器、连接器和debugger的一个命令行编译器。参考《TC使用指南》。
Q. 我怎样创建配置文件?
A. 当运行INSTALL程序时可以创建为TCC的设置的名为TURBOC.CFG的文件。这个文件仅仅是一个ASCII字符文件,你可以用文本编辑器改变它。它包括库和头文件的路径信息贡TCC使用。INSTALL并不创建TCCONFIG.TC文件,因为TC的安装目录就是默认的路径。你可以在运行TC时设置你的选项,然后按Alt-O/S保存。
Q. 为什么我得到这样的消息:Linker Error: Unable to open input file 'C0x.OBJ'?
A. 连接器linker在TC的库目录下查找TC的启动文件和库文件。这个设置在Options/Directories菜单下。
安装程序初始化这个选项到拷贝有启动文件和库文件的路径下。
Q. 为什么当我#i nclude <stdio.h>时,TC报告:"Unable to open include file 'stdarg.h'"?
A. 最有可能是你打开的文件太多,超过了dos的限定。在DOS的CONFIG.SYS里增加一行FILES=20,允许dos同时打开20个文件。CONFIG.SYS会在重启后生效。参考《IBM DOS手册》。
Q. 为什么连接器告诉我all the graphics library routines are undefined(所有的图形库例程都未定义)?
A. IDE中Options/Linker/Graphics Library这个选项必须设成“ON”,如果你使用TC图形库函数并且没有在工程文件里加入GRAPHICS.LIB的话。例如编译BGIDEMO(译注:TC自带的图形功能的DEMO程序),需在命令行下键入:TCC BGIDEMO.C GRAPHICS.LIB<Enter>
Q. How do I change the colors of the editor and menus in TC?
A. The utility TCINST.EXE allows you to customize your colors.
Q. 怎样改变TC中编辑器和菜单的颜色?
A. TCINST.EXE允许你自定义这些颜色。
Q. 我怎样在打印机上打印一个代码串?
A. 在TC中按<Ctrl><K><P>,将会打印一个标记块。如果没有标记块就会打印整个代码。
G e n e r a l I / O
----------------------------------------------------------------------
Q. 在cprintf()函数里用'\n'并没有使光标回到下一行开头,它只是移到了正下方。
A. cprintf()不把'\n'解释成行终结符/起始符的组合,它仅作为起始符。想换行需要手工强制插入行终
止符:cprintf("\n\r");
Q. 我怎样将TC里的程序打印出来?
A. TC使用了一个文件指针(stdprn 译注:作为打印机的输出流),它在STDIO.H中定义。你需要这样打开stdprn:
#i nclude <stdio.h>
main()
{
fprintf(stdprn, "Hello, world\n");
}
注意如果你的打印机是行缓冲的,将以'\n'截断输出。
Q. How do I print a long double?
A. Use the "%Lf" format.
long double ldbl = 1E500;
printf("%Lf", ldbl);
Q. 怎样输出长整形数?
A. 使用"%Lf"格式符。
long double ldbl = 1E500;
printf("%Lf", ldbl);
Q. 怎样创建一个COM文件?
A. DOS3.2以前的版本都包括EXE2BIN这个命令用来把EXE转换成COM。对于没有EXE2BIN的用户,TC命令行连接器-TLINK的/t选项能够取而代之创建COM文件。例如:
tcc -mt -lt tiny
将会创建TINY.COM代替TINY.EXE。
EXE转COM有明确的限制。在《IBM DOS系统手册》里可查到。
TC的TINY(微)模式和COM形式兼容,但用到符点例程的程序不能够转换。
G r a p h i c s
----------------------------------------------------------------------
Q. 为什么当我使用图形函数时得到错误信息:BGI Error: graphics not initialized (use 'initgraph')?我的程序明明已经调用了initgraph().
A. 想知道为什么初始化函数出错,可以检查graphresult()的返回值。例如:
#i nclude <graphics.h>
main()
{
int gerr; /* graphics error */
int gdriver = DETECT, gmode;
/* Initialize graphics using auto-detection and look
for the .BGI and .CHR files in the C:\TURBOC directory.
*/
initgraph(&gdriver, &gmode, "C:\\TURBOC");
if ((gerr = graphresult()) != grOk)
{
printf("Error : %s\n", grapherrormsg(gerr));
exit(1);
}
:
}
M a t h / F l o a t i n g P o i n t
----------------------------------------------------------------------
Q. 我怎样捕捉浮点错误?
A. 在TC指南中查看signal() 和 matherr()两个函数。signal()函数可能用来捕捉80x87协处理器或80x87仿真器。matherr()函数捕捉的是math函数库的错误。
L i n k e r E r r o r s
----------------------------------------------------------------------
Q. 为什么我得到Linker Error: Undefined symbol '_main' in module C0 的信息?
A. 每个C程序必须调用main()函数。这是你程序执行的第一个函数。The function name must be all in lower case.如果你采用多文件编译,工程的所有源文件中有且只能有一个main()函数。
Q. 我在用TC连接汇编语言时,编译器报告说所有的函数未定义。
A. 确保在所有的汇编函数名前都加了下划线'_'。Your assembly language program should be assembled with Case Sensitivity.
O t h e r Q u e s t i o n s
----------------------------------------------------------------------
Q. 我怎样改变栈的大小?
A. TC中栈的大小是由运行时全局变量_stklen决定的。如想把大小改成10000字节,需在程序中包括下面一行:
extern unsigned _stklen = 10000;
这个声明不能出现在任何函数内部。默认的栈大小是4096字节(4K)。
Q. 我在程序运行是得到了一条 'Stack Overflow!'的消息,怎么办?
A. 你可以使用下面的处理方法使栈增加。栈的溢出通常是由局部数据或递归函数引起的。你可以通过对变量静态类型的声明来生命栈的数量。
main() main()
{ {
char x[5000]; --> static char x[5000];
: :
} }
Q. 我的程序出现 'Null pointer assignment',什么意思?
A. 在TC小数据模式返回到DOS前,会检查数据段的开头是否有误。这个消息警告,你可能使用了未定义的指针或程序的内存被不正确的使用。
Q. 为什么TCC生成的.EXE文件比TC的小?
A. TC的默认配置是,在EXE创建时包括debugging信息,然而TCC并没有这么做。如果你不想产生debugging信息,可以在IDE中按Alt-D/S/N关闭此功能。
Q. 为什么会因为DOS.H导致 错误信息:"declaration syntax error"?
A. 想把TC关键字用于特别用途的时候,必须把"Ansi keywords only"关上。
Q. 我能为全局变量声明64K以上的内存吗?
A. 在Tiny, Small, Medium, Compact 和 Large几个内存模式下只要用static静态变量就好了。在Huge模式下,每个source module(代码模块)都有64K。
Q. 我怎样声明才能使数组超过64K?
A. 更大的数组必须在建立堆之外。例如1024 * 128的二维数组:
#i nclude <alloc.h>
char (huge *array)[128];
:
main()
{
:
array = farcalloc(sizeof(*array), 1024);
:
}
The array can be accessed with the same code as an array not
allocated off the heap.
必须使用"huge"关键字声明"array",因为只有huge指针能超越64K的地址。注意:下划线'_'被用于所有外部符号的prepended(预处理)。