Learn how to make a c program without the Header File
Along with the procedure, I would
also discuss how exactly the include statements are treated when
programs are compiled.
The first statement that we write while
making a C/C++ program is
#include<ANYHEADERFILE.H>
So let us discuss how this statement is
actually seen by a compiler
#, as we all know is called Pre-processor
directive. Its name itself signifies its work
I.e. the statement following # are first
processed and then the program is compiled i.e. these statements are processed
not on compile time, but before compile
time.
As soon as compiler notices a "#"
in the program, the code of the statement following # is replaced by the
actual code of that statement.
Hence this makes the user not to type the
tedious code again and again, instead, they can just create any file of it,
specify its path, and include that file as header file followed by a
"#" so that if the path and file are correctly specified, then the
bulky code that will be seen by the compiler as if that code is pasted into
that program itself. So now the programs become complete and hence now the actual compilation starts.
This was the use of pre-processor directive
i.e. if similar bulky code is to be used again and again in many programs then
better declare that code in a text file, paste that file in "include"
folder of your turboC, and now in your program just include
That file in a statement followed by #.
Now coming to our topic which was to make a
C/C++ program without including a header file.
Now I guess you all must have got it how I am
going to do so. Yes.. exactly.. you got it right!!
Instead of writing the #include statements,
I am going to paste the actual code of the file which we were included through #include statements.
We will try this out on the most basic
program of any language i.e. hello world program
The basic program looks like:
#include<stdio.h> #include<conio.h> void main() { printf("Hello World"); getch(); } //And on pasting code for the two #include statements, our program would be as: /* stdio.h Definitions for the stream input and output. Copyright (c) 1987, 1991 by Borland International All Rights Reserved. */ #ifndef __STDIO_H #define __STDIO_H #if !defined( __DEFS_H ) #include <_defs.h> #endif #ifndef NULL #include <_null.h> #endif #ifndef _SIZE_T #define _SIZE_T typedef unsigned size_t; #endif /* Definition of the file position type */ typedef long fpos_t; /* Definition of the control structure for streams */ typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char *buffer; /* Data transfer buffer */ unsigned char *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */ /* Bufferisation type to be used as 3rd argument for "setvbuf" function */ #define _IOFBF 0 #define _IOLBF 1 #define _IONBF 2 /* "flags" bits definitions */ #define _F_RDWR 0x0003 /* Read/write flag */ #define _F_READ 0x0001 /* Read only file */ #define _F_WRIT 0x0002 /* Write only file */ #define _F_BUF 0x0004 /* Malloc'ed Buffer data */ #define _F_LBUF 0x0008 /* line-buffered file */ #define _F_ERR 0x0010 /* Error indicator */ #define _F_EOF 0x0020 /* EOF indicator */ #define _F_BIN 0x0040 /* Binary file indicator */ #define _F_IN 0x0080 /* Data is incoming */ #define _F_OUT 0x0100 /* Data is outgoing */ #define _F_TERM 0x0200 /* File is a terminal */ /* End-of-file constant definition */ #define EOF (-1) /* End of file indicator */ /* Number of files that can be open simultaneously */ #if __STDC__ #define FOPEN_MAX 18 /* Able to have 18 files (20 - stdaux & stdprn) */ #else #define FOPEN_MAX 20 /* Able to have 20 files */ #define SYS_OPEN 20 #endif #define FILENAME_MAX 80 /* Default buffer size use by "setbuf" function */ #define BUFSIZ 512 /* Buffer size for stdio */ /* Size of an arry large enough to hold a temporary file name string */ #define L_ctermid 5 /* CON: plus null byte */ #define P_tmpdir "" /* temporary directory */ #define L_tmpnam 13 /* tmpnam buffer size */ /* Constants to be used as 3rd argument for "fseek" function */ #define SEEK_CUR 1 #define SEEK_END 2 #define SEEK_SET 0 /* Number of unique file names that shall be generated by "tmpnam" function */ #define TMP_MAX 0xFFFF /* Standard I/O predefined streams */ #if !defined( _RTLDLL ) extern FILE _Cdecl _streams[]; extern unsigned _Cdecl _nfile; #define stdin (&_streams[0]) #define stdout (&_streams[1]) #define stderr (&_streams[2]) #if !__STDC__ #define stdaux (&_streams[3]) #define stdprn (&_streams[4]) #endif #else #ifdef __cplusplus extern "C" { #endif FILE far * far __getStream(int); #ifdef __cplusplus } #endif #define stdin __getStream(0) #define stdout __getStream(1) #define stderr __getStream(2) #define stdaux __getStream(3) #define stdprn __getStream(4) #endif #ifdef __cplusplus extern "C" { #endif void _Cdecl clearerr(FILE *__stream); int _Cdecl fclose(FILE *__stream); int _Cdecl fflush(FILE *__stream); int _Cdecl fgetc(FILE *__stream); int _Cdecl fgetpos(FILE *__stream, fpos_t *__pos); char *_Cdecl fgets(char *__s, int __n, FILE *__stream); FILE *_Cdecl fopen(const char *__path, const char *__mode); int _Cdecl fprintf(FILE *__stream, const char *__format, ...); int _Cdecl fputc(int __c, FILE *__stream); int _Cdecl fputs(const char *__s, FILE *__stream); size_t _Cdecl fread(void *__ptr, size_t __size, size_t __n, FILE *__stream); FILE *_Cdecl freopen(const char *__path, const char *__mode, FILE *__stream); int _Cdecl fscanf(FILE *__stream, const char *__format, ...); int _Cdecl fseek(FILE *__stream, long __offset, int __whence); int _Cdecl fsetpos(FILE *__stream, const fpos_t *__pos); long _Cdecl ftell(FILE *__stream); size_t _Cdecl fwrite(const void *__ptr, size_t __size, size_t __n, FILE *__stream); char *_Cdecl gets(char *__s); void _Cdecl perror(const char *__s); int _Cdecl printf(const char *__format, ...); int _Cdecl puts(const char *__s); int _CType remove(const char *__path); int _CType rename(const char *__oldname,const char *__newname); void _Cdecl rewind(FILE *__stream); int _Cdecl scanf(const char *__format, ...); void _Cdecl setbuf(FILE *__stream, char *__buf); int _Cdecl setvbuf(FILE *__stream, char *__buf, int __type, size_t __size); int _Cdecl sprintf(char *__buffer, const char *__format, ...); int _Cdecl sscanf(const char *__buffer, const char *__format, ...); char *_Cdecl strerror(int __errnum); FILE *_Cdecl tmpfile(void); char *_Cdecl tmpnam(char *__s); int _Cdecl ungetc(int __c, FILE *__stream); int _Cdecl vfprintf(FILE *__stream, const char *__format, void *__arglist); int _Cdecl vfscanf(FILE *__stream, const char *__format, void *__arglist); int _CType vprintf(const char *__format, void *__arglist); int _Cdecl vscanf(const char *__format, void *__arglist); int _Cdecl vsprintf(char *__buffer, const char *__format, void *__arglist); int _Cdecl vsscanf(const char *__buffer, const char *__format, void *__arglist); int _CType unlink(const char *__path); int _Cdecl getc(FILE *__fp); int _Cdecl getchar(void); int _Cdecl putchar(const int __c); int _Cdecl putc(const int __c, FILE *__fp); int _Cdecl feof(FILE *__fp); int _Cdecl ferror(FILE *__fp); #if !__STDC__ int _Cdecl fcloseall(void); FILE *_Cdecl fdopen(int __handle, char *__type); int _Cdecl fgetchar(void); int _Cdecl flushall(void); int _Cdecl fputchar(int __c); FILE * _Cdecl _fsopen (const char *__path, const char *__mode, int __shflag); int _Cdecl getw(FILE *__stream); int _Cdecl putw(int __w, FILE *__stream); int _Cdecl rmtmp(void); char * _Cdecl _strerror(const char *__s); char * _Cdecl tempnam(char *__dir, char *__pfx); #define fileno(f) ((f)->fd) #endif int _Cdecl _fgetc(FILE *__stream); /* used by getc() macro */ int _Cdecl _fputc(char __c, FILE *__stream); /* used by putc() macro */ #ifdef __cplusplus } #endif /* The following macros provide for common functions */ #define ferror(f) ((f)->flags & _F_ERR) #define feof(f) ((f)->flags & _F_EOF) #define getc(f) \ ((--((f)->level) >= 0) ? (unsigned char)(*(f)->curp++) : \ _fgetc (f)) #define putc(c,f) \ ((++((f)->level) < 0) ? (unsigned char)(*(f)->curp++=(c)) : \ _fputc ((c),f)) #define getchar() getc(stdin) #define putchar(c) putc((c), stdout) #define ungetc(c,f) ungetc((c),f) /* traditionally a macro */ #endif /* THIS WAS THE CODE OF STDIO.H AND BELOW IS THE CODE OF CONIO.H IN THIS WAY BOTH OUR HEADER FILES ARE INCLUDED WITHOUT ANY INCLUDE STATEMENTS */ /* conio.h Direct MSDOS console input/output. Copyright (c) 1987, 1991 by Borland International All Rights Reserved. */ #if !defined(__CONIO_H) #define __CONIO_H #if !defined(__DEFS_H) #include <_defs.h> #endif #define _NOCURSOR 0 #define _SOLIDCURSOR 1 #define _NORMALCURSOR 2 struct text_info { unsigned char winleft; unsigned char wintop; unsigned char winright; unsigned char winbottom; unsigned char attribute; unsigned char normattr; unsigned char currmode; unsigned char screenheight; unsigned char screenwidth; unsigned char curx; unsigned char cury; }; enum text_modes { LASTMODE=-1, BW40=0, C40, BW80, C80, MONO=7, C4350=64 }; #if !defined(__COLORS) #define __COLORS enum COLORS { BLACK, /* dark colors */ BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, /* light colors */ LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE }; #endif #define BLINK 128 /* blink bit */ extern int _Cdecl directvideo; extern int _Cdecl _wscroll; #ifdef __cplusplus extern "C" { #endif void _Cdecl clreol( void ); void _Cdecl clrscr( void ); void _Cdecl gotoxy( int __x, int __y ); int _Cdecl wherex( void ); int _Cdecl wherey( void ); int _Cdecl getch( void ); int _Cdecl getche( void ); int _Cdecl kbhit( void ); int _Cdecl putch( int __c ); #ifndef _PORT_DEFS int _Cdecl inp( unsigned __portid ); unsigned _Cdecl inpw( unsigned __portid ); int _Cdecl outp( unsigned __portid, int __value ); unsigned _Cdecl outpw( unsigned __portid, unsigned __value ); unsigned char _Cdecl inportb( int __portid ); void _Cdecl outportb( int __portid, unsigned char __value ); #endif /* !_PORT_DEFS */ int _Cdecl inport( int __portid ); void _Cdecl outport( int __portid, int __value ); void _Cdecl delline( void ); int _Cdecl gettext( int __left, int __top, int __right, int __bottom, void *__destin); void _Cdecl gettextinfo (struct text_info *__r ); void _Cdecl highvideo( void ); void _Cdecl insline( void ); void _Cdecl lowvideo( void ); int _Cdecl movetext( int __left, int __top, int __right, int __bottom, int __destleft, int __desttop ); void _Cdecl normvideo( void ); int _Cdecl puttext( int __left, int __top, int __right, int __bottom, void *__source ); void _Cdecl textattr( int __newattr ); void _Cdecl textbackground( int __newcolor ); void _Cdecl textcolor( int __newcolor ); void _Cdecl textmode( int __newmode ); void _Cdecl window( int __left, int __top, int __right, int __bottom); void _Cdecl _setcursortype( int __cur_t ); char * _Cdecl cgets( char *__str ); int _Cdecl cprintf( const char *__format, ... ); int _Cdecl cputs( const char *__str ); int _Cdecl cscanf( const char *__format, ... ); char * _Cdecl getpass( const char *__prompt ); int _Cdecl ungetch( int __ch ); #ifndef _PORT_DEFS #define _PORT_DEFS /* These are in-line functions. These prototypes just clean up some syntax checks and code generation. */ unsigned char _Cdecl __inportb__( int __portid ); unsigned int _Cdecl __inportw__( int __portid ); void _Cdecl __outportb__( int __portid, unsigned char __value ); void _Cdecl __outportw__( int __portid, unsigned int __value ); #define inportb __inportb__ #define inportw __inportw__ #define outportb __outportb__ #define outportw __outportw__ #define inp( portid ) __inportb__( portid ) #define outp( portid,v ) (__outportb__( portid,v ), (int)_AL) #define inpw( portid ) __inportw__( portid ) #define outpw( portid,v ) (__outportw__( portid,v ), (unsigned)_AX) #endif /* _PORT_DEFS */ #ifdef __cplusplus } #endif #endif /* __CONIO_H */ /* NOW STARTS OUR MAIN FUNCTION */ void main() { printf("Helloworld"); getch(); }
Try running this program, it will run like
our normal program, and will print Helloworld as its output.
Now the question may arise as from where
shall we copy the code of any header file so I would like to share all header
files are stored in C:\turboc3\include in case you are using TurboC . Just open
include folder and you will see all possible header files in C/C++.
Open these files in any text editor, copy
it and paste it in program area to achieve our goal.
No doubt our program has become bulky, but
our purpose is served.
**
We can even include our name as an include statement in #include as
#include<aman.txt> in place of
#include<conio.h>
All you need to do is just copy all text of
conio.h in a new text document named as aman.txt and paste this text file in
include folder **
If you have any queries please feel free to
comment and ask .
0 comments:
Post a Comment