home *** CD-ROM | disk | FTP | other *** search
- TURBO C 2.0: ANSWERS TO COMMON QUESTIONS
-
-
- G e t t i n g S t a r t e d
- ----------------------------------------------------------------------
- Q. How do I install Turbo C?
- A. Run the INSTALL program from the INSTALL/HELP disk. To start
- the installation, change your current drive to the one that
- has the install program on it and type INSTALL. You will be
- given instructions in a box at the bottom of the screen for
- each prompt. For example, if you will be installing from
- drive A:, type:
-
- A:
- INSTALL
-
- At this point, the INSTALL program will appear with menus
- selections and descriptions to guide you through the installation
- process.
-
- Q. How do I run Turbo C?
- A. After you have installed Turbo C, type "TC" from the DOS
- prompt and you're ready to go. Chapter 2 (Getting Started)
- of the Turbo C User's Guide will guide you through your
- first Turbo C program.
-
- Q. What is the difference between TC.EXE and TCC.EXE?
- A. The Turbo C package comes with two compilers, an Integrated
- Environment named TC.EXE and a command-line compiler named
- TCC.EXE. The Integrated Environment is essentially
- the command-line compiler with an integrated editor,
- linker, and debugger. Please refer to the Turbo C
- User's Guide for details on using both systems.
-
- Q. What is a configuration file?
- A. A configuration file tells Turbo C what options to default to
- and where to look for its library and header files. TC.EXE
- looks for a configuration file named TCCONFIG.TC, and
- TCC.EXE looks for a file named TURBOC.CFG. See the User's
- Guide, pages 40 and 143 for more information.
-
- Q. How do I create a configuration file?
- A. When you run the INSTALL program it creates a configuration
- file named TURBOC.CFG for TCC.EXE. This file is just an
- ASCII file which you can change with any text editor. It
- contains the path information for the library and header
- files for TCC.EXE to use. The INSTALL program does not
- create a TCCONFIG.TC file for TC.EXE because it installs
- the directory information directly into TC.EXE. You can
- create a configuration file for TC.EXE by running TC,
- setting your options however you want to set them, and
- typing Alt-O/S.
-
- I n t e g r a t e d E n v i r o n m e n t
- ----------------------------------------------------------------------
- Q. Why is Turbo C not able to find any of my #include files?
- A. The compiler searches for include files in the Turbo C Include
- Directories. This option is specified under the Options/Directories
- menu. The INSTALL program initially sets this option to the
- directory where it copied all the Turbo C *.h files.
-
-
- Q. Why do I get the message:
- Linker Error: Unable to open input file 'C0x.OBJ'
- A. The linker searches for Turbo C start-up and library files in the
- Turbo C Library Directories. This option is specified under the
- Options/Directories menu. The INSTALL program initially sets this
- option to a directory where it copied the start-up and library
- files.
-
-
- Q. How do I get Turbo C to link in my own libraries or use multiple
- source files?
- A. Turbo C's Project facility is designed to allow you to work with
- multiple files. Refer to Chapter 3 of the Turbo C User's Guide,
- under "Projects: Using Multiple Source Programs".
-
-
- Q. Why does the linker tell me that all the graphics library
- routines are undefined?
- A. The Options/Linker/Graphics Library item must be set ON, if
- you are using any Turbo C graphics functions and have not
- specifyed GRAPHICS.LIB in a project file.
-
-
- Q. Why does Turbo C report "Unable to open include file 'stdarg.h'"
- when I try to #include <stdio.h>?
- A. The most probable reason is that you have exceeded the number
- of files that DOS can have open simultaneously. Add the line
-
- FILES=20
-
- to your DOS CONFIG.SYS file. This allows DOS to open up to 20
- files at the same time. CONFIG.SYS will only be effective
- after you have rebooted your computer. See the IBM DOS Reference
- Manual for details on the CONFIG.SYS file.
-
-
- 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. How do I get a listing of my source code to my printer?
- A. From within the Turbo C editor hit <Ctrl><K><P>. This will
- print a marked block to the printer. If no block is marked
- this key sequence will print the entire file in your editor.
-
-
- Q. When I Make, Run, or Trace a program Turbo C sometimes goes
- through the compile and link process even when the object files
- are up-to-date.
- A. Turbo C's MAKE logic works solely on a file's date and time
- stamp. If one of your source files is marked with a date
- that's sometime in the future, the object files that are
- created from it will always be older than the source file,
- and Turbo C will always try to rebuild the file. You can fix
- this by using TOUCH.COM to set the file to the current date
- and time. You should also make sure that your system's date
- and time are always properly set.
-
-
- C o m m a n d - L i n e C o m p i l e r
- ----------------------------------------------------------------------
- Q. Why is Turbo C not able to find any of my #include files?
- A. The compiler searches for include files in the Turbo C Include
- Directories. This option is specified by the -I switch. The INSTALL
- program initially writes a configuration file (TURBOC.CFG) that
- sets this to the directory where it copied all the Turbo C *.h
- files.
-
-
- Q. Why do I get the message:
- Linker Error: Unable to open input file 'C0x.OBJ'
- A. The linker searches for Turbo C start-up and library files in the
- Turbo C Library Directories. This option is specified by the -L
- switch. If you allow TCC to invoke the linker, it will search the
- directories in the configuration file (TURBOC.CFG) written by the
- INSTALL program. If you run TLINK, the configuration file is not read.
-
- Q. Why does the linker tell me that all the graphics library
- routines are undefined?
- A. TCC will not search the graphics library unless you tell it to.
- You should specify the graphics library on the command line. For
- example, to compile BGIDEMO, type
-
- TCC BGIDEMO.C GRAPHICS.LIB<Enter>
-
-
- G e n e r a l I / O
- ----------------------------------------------------------------------
- Q. The '\n' in cprintf() does not return the cursor to the
- beginning of the line. It only moves the cursor down one line.
- A. cprintf() no longer interprets '\n' as a Carriage Return/
- Line Feed combination. The '\n' only outputs a Line Feed. To
- force the cursor to the beginning of the line, manually
- insert a Carriage Return:
-
- cprintf("\n\r");
-
-
- Q. How do I print to the printer from a Turbo C program?
- A. Turbo C uses a FILE pointer (stdprn) defined in the STDIO.H
- file. You do not need to open stdprn before using it:
-
- #include <stdio.h>
- main()
- {
- fprintf(stdprn, "Hello, world\n");
- }
-
- Note that if your printer is line-buffered, the output is
- flushed only after a '\n' is sent.
-
-
- Q. I am reading and writing binary files. My program is
- translating the Carriage Return (0x0D) and Line Feed (0x0A)
- characters. How do I prevent this from happening?
- A. Files opened in text mode will translate these characters for
- DOS. To read a file in binary mode, open it in binary mode.
- For example
-
- #include <stdio.h>
- main()
- {
- FILE *binary_fp;
- char buffer[100];
-
- binary_fp = fopen("MYFILE.BIN", "rb");
-
- fread(buffer, sizeof(char), 100, binary_fp);
-
- :
- }
-
- The default file mode is text.
-
-
- Q. Why don't printf() and puts() print text in color?
- A. Use the console I/O functions cprintf() and cputs() for color output.
-
- #include <conio.h>
- main()
- {
- textcolor(BLUE);
- cprintf("I'm blue.");
- }
-
-
- Q. How do I print a long integer?
- A. Use the "%ld" format:
-
- long int l = 70000L;
- printf("%ld", l);
-
-
- Q. How do I print a long double?
- A. Use the "%Lf" format.
-
- long double ldbl = 1E500;
- printf("%Lf", ldbl);
-
-
- E x a m p l e P r o g r a m s
- ----------------------------------------------------------------------
- Q. How do I compile the MICROCALC spread sheet?
- A. See Appendix G of the Turbo C Reference Manual.
-
-
- Q. How do I compile the BGIDEMO program?
- A. 1. Make sure that the following Turbo C files are in your
- current directory:
-
- BGIDEMO.C
- *.BGI
- *.CHR
-
- 2. Run TC.
-
- 3. Load BGIDEMO.C into the Editor by hitting F3 then typing
- BGIDEMO<Enter>
-
- 3. Go to the Run menu and choose the Run item.
-
-
- Q. How do I create a COM file?
- A. DOS versions 3.2 and earlier include an EXE2BIN utility that
- converts EXE files to COM files. For users who do not have
- EXE2BIN, the Turbo C command-line linker, TLINK will create
- a COM file instead of an EXE file if the /t option is
- specified. For example:
-
- tcc -mt -lt tiny
-
- will create TINY.COM instead of TINY.EXE.
-
- There are certain limitations in converting an EXE file to a COM
- file. These limitations are documented in the IBM Disk Operating
- System manual under EXE2BIN.
-
- Turbo C's TINY model is compatible with the COM format, but programs
- that use Turbo C's floating point routines cannot be converted to a
- COM file.
-
-
- G r a p h i c s
- ----------------------------------------------------------------------
- Q. Why do I get the error message:
-
- BGI Error: graphics not initialized (use 'initgraph')
-
- when I use a graphics function? My program has already
- called initgraph().
- A. For some reason initgraph() failed. To find out why, check
- the return value of graphresult(). For example:
-
- #include <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. Why do I get incorrect results from all the math library
- functions like cos() and tan()?
- A. You must #include <math.h> before you call any of the standard
- Turbo C math functions. In general, Turbo C assumes that a function
- that is not declared returns an int. In the case of math functions,
- they usually return a double. For example
-
- /* WRONG */ /* RIGHT */
- #include <math.h>
- main() main()
- { {
- printf("%f", cos(0)); printf("%f", cos(0));
- } }
-
-
- Q. How do I "trap" a floating point error?
- A. See the signal() and matherr() functions in the Turbo C Reference
- Guide. The signal() function may be used to trap errors in the
- 80x87 or the 80x87 emulator. The matherr() function traps errors
- in the Math Library functions.
-
-
- L i n k e r E r r o r s
- ----------------------------------------------------------------------
- Q. Why do I get the message:
- Linker Error: Unable to open input file 'C0x.OBJ'
- A. See "Integrated Environment" section above.
-
-
- Q. Why do I get the message:
- Linker Error: Undefined symbol '_main' in module C0
- A. Every C program must contain a function called main(). This
- is the first function executed in your program. The function
- name must be all in lower case. If your program does not
- have one, create one. If you are using multiple source files,
- the file that contains the function main() must be one of
- the files listed in the Project.
-
- Note that an underscore character '_' is prepended to all
- external Turbo C symbols.
-
-
- Q. Why does the linker tell me that all the graphics library
- routines are undefined?
- A. See the "Integrated Environment" and "Command-line Compiler"
- sections above.
-
-
- Q. What is a 'Fixup overflow'?
- A. See the listing of TLINK error messages in Appendix D of the
- Turbo C Reference Guide.
-
-
- Q. I am linking my own assembly language functions with Turbo C.
- The linker reports that all of my functions are undefined.
- A. Make sure that you have put an underbar character '_' in front of all
- assembly language function names to be called by Turbo C. Your assembly
- language program should be assembled with Case Sensitivity. See
- the Chapter 12, "Advanced Programming," in the Turbo C User's Guide
- for details.
-
-
- O t h e r Q u e s t i o n s
- ----------------------------------------------------------------------
- Q. How do I change the stack size?
- A. The size of the stack of a Turbo C program is determined at
- run-time by the global variable _stklen. To change the size
- to, for example 10000 bytes, include the following line in
- your program:
-
- extern unsigned _stklen = 10000;
-
- This statement must not be inside any function definition.
- The default stack size is 4096 bytes (4K).
-
- Q. I'm getting a 'Stack Overflow!' message when I run my program.
- How can I work around this?
- A. You may increase the stack size by following the procedure above. Stack
- overflows are usually caused by a large amount of local data or
- recursive functions. You can decrease the amount of stack space
- used by declaring your local variables static:
-
- main() main()
- { {
- char x[5000]; --> static char x[5000];
- : :
- } }
-
- Of course, you should be aware that there are other effects
- that the "static" keyword has, as applied here.
-
- Q. My program comes up with the message 'Null pointer assignment'
- after it terminates. What does this mean?
- A. Before a small-data model Turbo C program returns to DOS, it will
- check to see if the beginning of its data segment has been corrupted.
- This message is to warn you that you have used uninitialized pointers
- or that your program has corrupted memory in some other way.
-
- Q. Why are .EXE files generated by TC.EXE larger than those
- generated by TCC.EXE?
- A. In the default configuration, TC.EXE includes debugging
- information in the .EXE files that it creates, and TCC.EXE
- does not. If you don't want to produce this debugging
- information, you can shut it off in the Integrated
- Development Environment by selecting Alt-D/S/N.
-
-
- Q. Why do I get "declaration syntax error" messages on DOS.H?
- A. You have set the "Ansi keywords only" option ON. Keep this option
- OFF when using any keywords specific to Turbo C .
-
-
- Q. I have a working program that dynamically allocates memory
- using malloc() or calloc() in small data models (tiny, small,
- and medium). When I compile this program in large data models
- (compact, large, and huge) my program hangs.
- A. Make sure that you have #include <alloc.h> in your program.
-
-
- Q. I am linking my own assembly language functions with Turbo C.
- But the linker reports that all of my functions are undefined.
- A. See answer above in the "Linker" section.
-
-
- Q. My far pointers "wrap around" when they are incremented over 64K.
- How do I reference a data object that is greater than 64K?
- A. Use huge pointers.
-
-
- Q. Can I declare more than 64K of global variables?
- A. You may have a total of up to 64K global and static data in
- the Tiny, Small, Medium, Compact and Large memory models. In
- the Huge model, the maximum is 64K per source module.
-
-
- Q. How do I declare an array that's greater than 64K?
- A. Arrays greater than 64K must be allocated off the heap. If,
- for example you wanted a two-dimensional array of characters
- that was 1024 by 128, the declaration you would expect to
- write would be:
-
- char array[1024][128];
-
- But since the size of this array is greater than 64K, it must
- be allocated off the heap. An example of this is:
-
- #include <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. For example:
-
- i = array[30][56];
-
- will assign "i" the value stored at the 31st by 57th element
- in "array".
-
- The use of the "huge" keyword is necessary in the declaration
- of "array" since only a huge pointer can address objects
- greater than 64k. For further discussion of huge pointers,
- refer to the User's Guide.
-
-
- Q. How do I interface Turbo C routines to a Turbo Pascal program?
- A. See the example programs CPASDEMO.PAS and CPASDEMO.C on disk.
- These files are packed in the file EXAMPLES.ARC and you will
- need to UNPACK them before using them.
-
-
- Q. How do I get Clipper to link with Turbo C?
- A. If you are having trouble, contact Nantucket Technical Support.
-