Why c is not high levl language?
Heh -- this answer requires perspective. Here's some history:
1st Generation language: Machine code -- all hexadecimal. Doesn't
really allow for macors or subroutining. Machine specific. 2nd
Generation Language: Assemblers. Commands on mnemonics, first with
a 1:1 relationship with machine code commands, but later with
extended commands, subroutine calls, macros. I could for example
enter a single command to pass a bit stream to the print buffer. In
Assembler, 1 command; in machine code many. Because all this
translated to Machine Code, you could edit your program in machine
or assembly. Still machine-dependent. 3rd Generation Languages.
COBOL, FORTRAN, BASIC, etc. The languages were intended to read
like common English (if your reader was a very stranger person), so
commands went away from 3 character mnemonics (LCC for Load and
Clear Core) to PRINT. Adding two numbers togehter and leaving the
result in a thrid variable takes about 10 or so assembler commands,
maybe 50 machine commands, and one COBOL Comannd "add A to B giving
C.". Strong emphasis on modular coding, subroutining, functions,
object oriented programming (at least as a buzzword). Admiral Grace
Hopper declares, "If you do work for the US Department of Defense,
your company WILL use COBOL internally!", thus reducing the
literally thousands of languages in use back down to a handleful.
3GLs are NOT machine dependent (well, we hoped they weren't), so
theoretically, if I wrote a FORTRAN program on a Hewlett Packard
system, and kept it to ANSI spec, it'd run on an IBM system and so
on. 4th Generation Languages. These were a lot like 3GLs but, where
3GL's contained only rudimentary I/O functionality, especially in
the area of magnetic and especially direct access based files.
4GL's not only sovled this, but inherently incorporated "Data Base"
handling -- organized data structures, often metaphorically
geometric in format, with tools to facilitate the access and
management of that DataBase. dBase was an example of this as was
IBM's IMS. 5th Generation Languages are arguable -- they may not
exist. If they do, they encorporate (well -- require actually)
tools that allow for (and demand) adherence to the User Interface
specs of the day. So Visual Basic allowed you to write Windows code
that would (usually) produce MS Standard Windows looking programs,
and allow for easy interface to all Windows subroutines and such --
-something that weas a royal pain to do manually. Earlier versions
of 5GL's sacrificed some of the Database Management capability of
the 4GL's and the flexibility of manually accessing DB's that 3GL's
gave you. From here, language structure and definition left the
path of "Generations" and kinda spread out, partially to include
HTML (HyperText Markup Language -- never really intended to be a
programming languge). Questions are raised daily about what we gain
in overall unity and ease of program creation on the one hand, and
what we lose in terms of specificity. It's said that, in a good
5GL, you can do 85 percent of the project in a week, 10 percent
more in a year, and the remaining 5 percent sometime before the
product goes obsolete. "C", originally developed around the UNIX
operating system, started life as a strong 3GL. However, modern
additions and changes could conceivabley qualify it for 4GL or 5GL
status -- or even something more. By my (paleolithic) definition, C
is a high level language solely because it is not machine
dependent. So -- according to me - it IS high level. Heh -- this
answer requires perspective. Here's some history: 1st Generation
language: Machine code -- all hexadecimal. Doesn't really allow for
macors or subroutining. Machine specific. 2nd Generation Language:
Assemblers. Commands on mnemonics, first with a 1:1 relationship
with machine code commands, but later with extended commands,
subroutine calls, macros. I could for example enter a single
command to pass a bit stream to the print buffer. In Assembler, 1
command; in machine code many. Because all this translated to
Machine Code, you could edit your program in machine or assembly.
Still machine-dependent. 3rd Generation Languages. COBOL, FORTRAN,
BASIC, etc. The languages were intended to read like common English
(if your reader was a very stranger person), so commands went away
from 3 character mnemonics (LCC for Load and Clear Core) to PRINT.
Adding two numbers togehter and leaving the result in a thrid
variable takes about 10 or so assembler commands, maybe 50 machine
commands, and one COBOL Comannd "add A to B giving C.". Strong
emphasis on modular coding, subroutining, functions, object
oriented programming (at least as a buzzword). Admiral Grace Hopper
declares, "If you do work for the US Department of Defense, your
company WILL use COBOL internally!", thus reducing the literally
thousands of languages in use back down to a handleful. 3GLs are
NOT machine dependent (well, we hoped they weren't), so
theoretically, if I wrote a FORTRAN program on a Hewlett Packard
system, and kept it to ANSI spec, it'd run on an IBM system and so
on. 4th Generation Languages. These were a lot like 3GLs but, where
3GL's contained only rudimentary I/O functionality, especially in
the area of magnetic and especially direct access based files.
4GL's not only sovled this, but inherently incorporated "Data Base"
handling -- organized data structures, often metaphorically
geometric in format, with tools to facilitate the access and
management of that DataBase. dBase was an example of this as was
IBM's IMS. 5th Generation Languages are arguable -- they may not
exist. If they do, they encorporate (well -- require actually)
tools that allow for (and demand) adherence to the User Interface
specs of the day. So Visual Basic allowed you to write Windows code
that would (usually) produce MS Standard Windows looking programs,
and allow for easy interface to all Windows subroutines and such --
-something that weas a royal pain to do manually. Earlier versions
of 5GL's sacrificed some of the Database Management capability of
the 4GL's and the flexibility of manually accessing DB's that 3GL's
gave you. From here, language structure and definition left the
path of "Generations" and kinda spread out, partially to include
HTML (HyperText Markup Language -- never really intended to be a
programming languge). Questions are raised daily about what we gain
in overall unity and ease of program creation on the one hand, and
what we lose in terms of specificity. It's said that, in a good
5GL, you can do 85 percent of the project in a week, 10 percent
more in a year, and the remaining 5 percent sometime before the
product goes obsolete. "C", originally developed around the UNIX
operating system, started life as a strong 3GL. However, modern
additions and changes could conceivabley qualify it for 4GL or 5GL
status -- or even something more. By my (paleolithic) definition, C
is a high level language solely because it is not machine
dependent. So -- according to me - it IS high level.