C Programming Sisir Kumar Jena CRC
C Programming Sisir Kumar Jena CRC
C Programming
Learn to Code
Reasonable efforts have been made to publish reliable data and information, but the author and publisher cannot
assume responsibility for the validity of all materials or the consequences of their use. The authors and publishers
have attempted to trace the copyright holders of all material reproduced in this publication and apologize to
copyright holders if permission to publish in this form has not been obtained. If any copyright material has not
been acknowledged please write and let us know so we may rectify in any future reprint.
Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted,
or utilized in any form by any electronic, mechanical, or other means, now known or hereafter invented, includ-
ing photocopying, microfilming, and recording, or in any information storage or retrieval system, without writ-
ten permission from the publishers.
For permission to photocopy or use material electronically from this work, access www.copyright.com or contact
the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. For works
that are not available on CCC please contact [email protected]
Trademark notice: Product or corporate names may be trademarks or registered trademarks and are used only for
identification and explanation without intent to infringe.
DOI: 10.1201/9781003188254
Typeset in Palatino
by SPi Technologies India Pvt Ltd (Straive)
In memory of my father, my guide, Baikuntha Nath Jena
Contents
Preface........................................................................................................................................... xvii
Acknowledgments........................................................................................................................xix
Organization of this Book............................................................................................................xxi
Author Biography...................................................................................................................... xxiii
2. Number Systems.................................................................................................................... 17
2.1 Introduction.................................................................................................................. 17
2.1.1 Non-positional Number System................................................................... 17
2.1.2 Positional Number System............................................................................ 17
2.2 Positional Number Systems....................................................................................... 18
2.2.1 Decimal Number System............................................................................... 18
2.2.2 Binary Number System.................................................................................. 20
2.2.3 Hexadecimal Number System...................................................................... 21
2.2.4 Octal Number System.................................................................................... 22
vii
viii Contents
4. Introduction to C Programming.......................................................................................... 61
4.1 Introduction.................................................................................................................. 61
4.2 History of C................................................................................................................... 62
4.3 Executing a C Program................................................................................................ 64
4.3.1 Editing.............................................................................................................. 64
4.3.2 Compiling........................................................................................................ 64
4.3.3 Linking............................................................................................................. 65
4.3.4 Executing.......................................................................................................... 65
4.4 Structure of a C Program............................................................................................ 65
4.4.1 Documentation................................................................................................ 65
4.4.2 Header Files..................................................................................................... 65
4.4.3 Global Variables.............................................................................................. 66
4.4.4 main() Function............................................................................................66
4.4.5 Subprograms................................................................................................... 67
4.4.6 Your First C Program...................................................................................... 67
4.5 Compilers and Editors for Executing C Programs.................................................. 69
4.5.1 Editors..............................................................................................................69
4.5.2 Compilers......................................................................................................... 69
4.5.3 Executing Your First C Program................................................................... 71
4.5.3.1 Mac.................................................................................................... 71
4.5.3.2 Windows........................................................................................... 72
4.5.3.3 Linux................................................................................................. 72
4.6 Review Questions........................................................................................................ 73
4.6.1 Objective Questions........................................................................................ 73
4.6.2 Short Answer Questions................................................................................ 73
4.6.3 Programming Questions................................................................................ 73
4.6.4 Long Questions............................................................................................... 75
References................................................................................................................................ 75
9. Functions............................................................................................................................... 179
9.1 Introduction................................................................................................................ 179
9.2 The Need for Functions............................................................................................. 181
9.3 Types of Function....................................................................................................... 182
9.4 User-defined Functions............................................................................................. 182
9.5 Components and Working of a Function............................................................... 186
9.5.1 Calling Function............................................................................................ 186
9.5.2 Called Function............................................................................................. 186
9.5.3 Function Prototype....................................................................................... 187
xii Contents
xvii
Acknowledgments
The idea of writing a book on C programming is quite an old thought of mine. I have been
writing the draft while teaching this subject. Having made some handouts for my stu-
dents, which they appreciated, I was motivated to write a book. I want to thank my stu-
dents for continuously suggesting that I write it. Some other people also motivated me and
supported me in completing it.
A heartful thanks to my wife, Priya Arundhati, and my son, Kritansh, for their encour-
agement, care, and love. Without them, my life would not be joyful. My parents and my
family members are my strength and excellent motivators for me, always.
A sincere thanks to Aastha Sharma, Senior Editor, CRC Press – Taylor & Francis Group,
for understanding my thoughts when writing this book and suggesting to me the neces-
sary additions for the final proposal. I am also grateful to Shikha Garg, Senior Editorial
Assistant, CRC Press – Taylor & Francis Group, who helped me produce the final manu-
script. I am also thankful to all editorial members who assisted me during the production
process of this book.
Finally, I would sincerely like to thank my friends and colleagues who directly or indi-
rectly support me in doing this work.
xix
Organization of this Book
xxi
Author Biography
Sisir Kumar Jena is presently working as an assistant professor in the Department of CSE,
DIT University, Dehradun. He was the HOD and an assistant professor in the Department
of CSE at Nalanda Institute of Technology, Bhubaneswar, India, during 2007–15. He has
more than ten years of teaching experience and five years of experience as a research
scholar at IIT Guwahati. He has been pursuing his Ph.D. in Computer Science and
Engineering at IIT, Guwahati, while writing this book. He has presented and published
many research papers and book chapters at refereed international conferences and in jour-
nals. His interest area includes digital VLSI design and testing, approximate computing,
IoT, and security in hardware.
xxiii
1
Introduction to the Computer
1.1 Introduction
Perhaps the most powerful and resourceful tool ever created by humanity is the computer.
The term “computer” could mean a device that calculates. But nowadays a computer can
do a variety of jobs. If you take any field, be it engineering, healthcare, automotive devices,
gaming, or entertainment, everywhere a computer is used to do the task. This chapter
introduces how computers came into existence and describes the different components
associated with a computing device. After completion of this chapter, the reader will have
learnt the following:
This chapter’s content is purely elementary and not meant for those who know the basics
of computer systems. Those with a moderate knowledge of any computer language can
skip this chapter. We will start the chapter by introducing the definition of a computer
system and its characteristics.
A computer is an electronic device that receives input through an input device, stores
it in the storage device (memory), and manipulates or processes the data to produce
information (output) through an output device.
DOI: 10.1201/9781003188254-1 1
2 C Programming
Speed
Memory Accuracy
Automac
Versality
Diligence
FIGURE 1.1
Characteristics of a computer.
Analyzing the definition, you may notice four crucial components of a computer sys-
tem: (1) input device, (2) output device, (3) storage device, and (4) the processing device.
The overall organization of all these components is discussed later in this chapter. The
above defines a computer system as a data processing machine. But it is not only a data
processing unit. Rather, it has several capabilities that need to be discussed here in the form
of its characteristics. We could not complete the definition without knowing the character-
istics of a computer system. Figure 1.1 shows the essential characteristics of a computer
system collected from [1].
(a) (b)
FIGURE 1.2
(a) Charles Babbage; (b) John von Neumann.
essential to us, but I would like to start with Charles Babbage’s (see Figure 1.2a) contribu-
tion. He is known as the father of the digital programmable computer.
The work of Babbage describing a “difference engine” was used by many researchers
as inspiration for further development [2], leading to several working models but with
the disadvantage that the programs were hardwired and challenging to change. A final
and major contribution was made during the 1940s by John von Neumann (see Figure
1.2b), known as the “stored program.” With a stored program, we can control a com-
puter system’s activity, and this program is usually stored inside the computer’s mem-
ory [2]. In today’s modern world, digital computers are all built based on this
stored-program concept. A brief contribution to computer development in chronologi-
cal order is [3]:
• The German philosopher and mathematician, Gottfried Leibniz (1646–1716), built the
first calculator to perform multiplication and division. It was not reliable due to the
inaccuracy of its parts.
• Charles Babbage (1792–1872) (Figure 1.1a) was a British inventor who designed his
difference engine in 1822 and, in 1842, came up with an “analytical engine” incorpo-
rating the ideas of a memory and card input/output for data and instructions. But he
was not able to build the system. Babbage is mostly remembered for and considered
as the father of digital computers.
• Howard Aiken (1900–73), a Harvard professor with IBM’s backing, built the Harvard
Mark I computer (51 ft long) in 1944. It required three seconds to perform
multiplication.
• John Vincent Atanasoff built a specialized computer in 1941 and was visited by
Willaim Mauchly before constructing the Electronic Numerical Integrator and
Calculator (ENIAC).
4 C Programming
• J. Presper Eckert and Mauchly designed and built the ENIAC in 1946 for military
computations. It used vacuum tubes (valves), which were totally electronic (and
operated in microseconds), instead of the electromechanical relay.
• Von Neumann was a scientific genius and a consultant on the ENIAC project. In 1950,
he formulated plans with Mauchly and Eckert for a new computer, the Electronic
Discrete Variable Automatic Computer (EDVAC), which was to store programs as
well as data.
• At the same time (1950), another computer named the Electronic Delay Storage
Automatic Calculator (EDSAC) was developed by Maurice Wilkes at Cambridge
University in England.
• After the above inventions, every computer built followed the von Neumann archi-
tecture. Several generations of computers have been developed, but the overall archi-
tecture remains the same.
The reader of this book is encouraged to find out more on computer generations and pres-
ent computer system scenarios.
Cabinet
Monitor
Speaker Speaker
Keyboard
Mouse
FIGURE 1.3
A desktop computer system.
Introduction to the Computer 5
Hard Disk
AC 230V SMPS Drive
CPU
Heat Sink
M O T H E R B O A R D
Primary Baery
Memory
FIGURE 1.4
Major components inside the cabinet.
Readers are encouraged to explore more about these components and write an essay that
will enhance their knowledge of a computer system.
According to [4], a simple digital computer should have five essential parts: (1) mem-
ory, (2) Arithmetic Logic Unit (ALU), (3) Control Unit (CU), (4) input devices, and (5)
output devices. Among these components, the ALU and CU belong to the CPU. The CU
of the CPU plays a significant role in executing the user’s task. The CU controls the overall
activity of the computer system and manages communication among the other compo-
nents. To understand the overall execution of a task, look at Figure 1.5, which shows the
basic organization of these components. The description of each component is given
below.
1.4.1 Input Devices
This unit helps in supplying data and instruction to the computer system. For example, if
we wish to instruct the computer to play a song, then we search for a particular song and
click the play button using the mouse. In this scenario, the mouse acts as the input unit.
Similarly, if we wish to write a computer program, we use the keyboard as our input
device. There are several input devices connected to our computer through which we give
commands: mouse, keyboard, joysticks, and others.
An input device reads data or instructions from the user and sends it to the computer
system for further processing.
6 C Programming
CPU
Keyboard Mouse
Input Output
Control Unit
Devices Devices
Primary
Memory
Secondary
Memory
Memory
FIGURE 1.5
Basic organization of a computer system.
1.4.2 Memory
Every computer has a memory unit primarily categorized into two types: primary memory
and secondary memory. We will further discuss the classification and description of these
memory units in Section 1.5. The primary job of this unit is to store everything, and that
includes the data or instructions read by the input unit, the intermediate result produced
by the processor, and the final result.
Memory is used to store input data or instructions, intermediate results yielded dur-
ing processing, and the final result produced by the processor.
The CPU is called the brain of the computer system. It controls and coordinates the
interaction among different components and handles all the arithmetic and logical
operations.
1.4.4 Output Devices
These help in displaying the results of a computation. For example, when we execute a
program, the output is shown on the monitor screen. So, in this case, the monitor acts as
the output device. Similarly, a speaker is also an output device.
An output device obtains the result produced by the CPU, converts it into a human-
readable form, and displays it to the user of the computer system.
A programmer needs to understand how the instructions are executed inside the CPU.
This requires a detailed exploration of the memory unit. The following section introduces
the idea of memory-processor integration and its communication technique.
1.5 Computer Memory
A modern digital computer has several memory subsystems organized in a hierarchy,
starting from the smallest high-speed registers to a high-capacity hard disk drive. A com-
puter has the following main memory subsystems:
1. Registers;
2. Cache memory;
3. Primary memory;
4. Secondary memory.
Figure 1.6 shows how these memories are arranged with the CPU for easy communica-
tion and program execution. The main reason behind so many categories of memory
lies in the two requirements: speed and capacity. The CPU needs high-speed memory
because the execution speed of a CPU is relatively high compared to the data supplying
capability (reading the content from memory and submitting it to the CPU for process-
ing) of any memory. On the other hand, a user always needs a high-volume memory to
permanently keep all their data and programs. The capacity of the secondary memory
is relatively high compared to the main memory, cache, and registers. In contrast, fetch-
ing data from the register is faster compared to any other memory subsystem. It is evi-
dent that building high-speed memory incurs more cost as compared to low-speed
memory.
A programmer needs to understand memory organization to write efficient programs.
Let us describe a few points about each category of all memory types.
8 C Programming
ALU
Control Unit
Secondary Memory
Program General Purpose
Counter Registers
R0
R1
Instrucon R2
Register
Rn
Cache Memory
FIGURE 1.6
Memory organization.
1.5.1 Registers
These are the smallest, high-speed, volatile memories available inside the CPU for easy
access while processing or executing a task. The total number of registers present inside a
CPU varies from architecture to architecture. The most common ones are general purpose
registers, program counters, and instruction registers. A general purpose register stores cur-
rent and intermediate data of an executed instruction. There may be several general pur-
pose registers available inside the CPU. A program counter keeps the information regarding
the instruction about to run next. It is like a counter and holds an address that keeps
increasing after the execution of the current instruction. The instruction register contains the
instruction that is currently executing. The CPU fetches the instruction from the primary
memory, places it inside the instruction register, decodes it, and finally executes it.
1.5.2 Cache Memory
Cache memory is a volatile memory present in between the main memory and the CPU
register. The speed of this memory is higher than main memory and slower than the CPU
registers. Every time the CPU requests the next instruction, the control unit first searches
for it inside the cache. If it is not there, then the control brings a set of instructions (along
with the required one) from the main memory and keep it inside the cache. The benefits of
bringing the whole group lie in the principle of locality of reference: the CPU always fetches
the instructions that are adjacent to each other, location wise.
1.5.3 Primary Memory
Primary memory, commonly referred to as the main memory, is a significant component of
any computing device. It is an intermediate memory between the secondary memory and
the CPU of the computer system. On request, the CPU needs to load an application in the
main memory for execution. When a programmer finishes writing a program, he or she
stores it in secondary memory. To execute that program, the CPU loads it from secondary
memory to the primary memory. The processor is now directly interacting with the main
memory and runs the program. At this point, it is necessary to understand the internal
architecture of the main memory subsystem.
Introduction to the Computer 9
TABLE 1.1
Units of Storage in Computer
Serial No. Units Description
1 bit Refers to either 0 or 1
2 1 Nibble 4 bits
3 1 Byte 8 bits
4 1 Kilobyte (KB) 1024 Bytes (210 Bytes)
5 1 Megabyte (MB) 1024 Kilobyte (210 KB)
6 1 Gigabyte (GB) 1024 Megabyte (210 MB)
7 1 Terabyte (TB) 1024 Gigabyte (210 GB)
8 1 Petabyte (PB) 1024 Terabyte (210 TB)
9 1 Exabyte (EB) 1024 Petabyte (210 PB)
10 1 Zettabyte (ZB) 1024 Exabyte (210 EB)
The main memory consists of several locations, and we can identify each location with
an address. A location holds data or an instruction in the form of binary bits. A bit is the
smallest unit of storage, refers to either 0 or 1, though it is not much use as a single unit. To
be useful, a collection of bits is required: a group of four bits forms a nibble, a group of eight
bits forms a byte; Table 1.1 shows the other units made from collections of bits.
Data stored in memory is in the form of a word, and the word size (word length) depends
on the computer architecture. A modern computer system can have 16-bit (2-byte word),
32-bit (4-byte word), or 64-bit (8-byte word) word sizes. An example of a simple main
memory is shown in Figure 1.7. The word length is 2 bytes, and there are 64 locations. Hence
to identify each location uniquely, we need 6 bits (26 = 64) starting from the address 000000
to 111111.
Two types of primary memory exist in a computer system: Random Access Memory
(RAM) and Read Only Memory (ROM). ROM has several variations: Programmable ROM
(PROM), Erasable Programmable ROM (EPROM), Electrically Erasable Programmable
Address 2-byte
Word Length
000000 1st Word
000001 2nd Word
000010
000011
000100
FIGURE 1.7
An example of a main memory subsystem.
10 C Programming
ROM (EEPROM), and so on; and the description of each type is not included in the scope
of this book. Similarly, RAM is also of two types: static RAM and dynamic RAM.
1.5.6 Secondary Memory
Before executing a program, you should write it and store it somewhere inside your com-
puter memory. Primary memory will not store your program permanently; it can help
your CPU execute the program by providing memory space. When your program finishes
running, the allocated memory will be taken back – that’s why you need permanent stor-
age to store your programs. Secondary memory does that job for you.
There are two types of secondary memory in today’s computers: a Hard Disk Drive
(HDD) and a Solid-State Drive (SSD). SSDs are much faster compared to HDDs. SDDs have
no mechanical moving parts, but HDDs have built-in platters called magnetic disks and a
movable head that travels back and forth between the disks to access the data. On the other
hand, SSDs are quite expensive compared to HDDs and have limited storage capacity.
Direcon of Movement
Spindle Plaer
Plaers Track
Plaer
Read–Write Head
Plaer
Read–Write
Head Sector
Spindle
FIGURE 1.8
Internal architecture of an HDD.
NAND NAND
NAND flash Memories RAM Flash Flash
Cache Memories Memories
Host SSD
Interface Controller
NAND NAND
Flash Flash
Memories Memories
Controller
(a) (b)
FIGURE 1.9
(a) A typical SSD; (b) Block diagram of an SSD.
12 C Programming
1.6.2 Operating System
An Operating System (OS) is system s/w that handles all the instructions coming from the
user or application s/w and instructs the h/w to perform accordingly (Figure 1.11). Several
OSs are available on the market, like Microsoft Windows 10, Ubuntu, Linux, Unix, and
iOS. After buying a new computer, the first task is to install an OS on it; only then will the
computer be usable. Later, we can install application s/w above the OS to do other specific
tasks. If we want to listen to music, we can install s/w like Windows Media Player or VLC
media player. Similarly, for word processing, we can install Microsoft Word or LibreOffice.
Figure 1.12 shows the position of an OS in a layering architecture.
Cabinet Soware
Monitor
1.
Speaker Speaker Applicaon
Soware
2.
System
Soware
Keyboard
Mouse
FIGURE 1.10
Hardware interaction through software.
Introduction to the Computer 13
Cabinet
Monitor
Applicaon
Soware
System
Speaker Soware
Keyboard
Mouse
FIGURE 1.11
System software providing access to hardware.
User
Applicaon
A Soware
Microso
Operang System Window
Cabinet
Monitor
Speaker Speaker
COMPUTER
HARDWARE
Keyboard Mouse Printer Modem
FIGURE 1.12
Operating System layer.
1. Resource management;
2. Memory management;
3. Process management;
4. File management.
A detailed description of these functions is beyond the scope of this book. Readers are
encouraged to explore more about these functions in any standard OS book.
14 C Programming
1.7 Review Questions
1.7.1 Long Answers
1.7.2 Short Answers
3. What is the full form of ENIAC, EDSAC, and EDVAC? Which one was developed
first?
4. What are SMPS and UPS? Why are they necessary?
5. What is a control unit, where is it present, and what does it do?
6. What is the role of an ALU, and what operations does it perform?
7. Give some examples of input devices and output devices.
8. What is the meaning of locality-of-reference?
9. Explain the memory hierarchy, with respect to size, cost, and speed, of several mem-
ory subsystems.
10. What is a bit? How many bits form one byte?
11. List out the different variations of read only memory (ROM).
12. What is the difference between volatile and non-volatile memory?
13. What is NAND-flash memory, and where is it used?
14. What is word size or word length?
15. What is a program counter?
16. What is an instruction register?
17. What is a general purpose register?
18. What is the full form of SATA and PATA? What is the difference between them?
19. What is a bootstrap loader program?
20. What is the typical rotational speed of a hard drive in a modern computer system?
1.7.3 Practical Exercises
1. What should you know before purchasing a computer (whether a desktop or a laptop)
from the market?
2. Do you think a bigger RAM capacity increases the speed of your computer system?
Explore and explain.
3. What are x64 and x86 based operating systems? What is the difference between both
of them? Try to find out which type of operating system is installed on your
computer.
4. Explore your system and try to find out the following information about your
computer:
a. What is the RAM size?
b. Which OS are you using?
c. What is the size of your secondary memory?
d. Is the secondary memory connected to your computer an HDD or SSD?
e. How can you find out how many processes are running on your system at any
instant of time?
f. What is the speed of your processor?
g. How many cores does your processor have?
h. What is the size of your CPU register?
5. Study different operating systems, their types, and consider which one is best, and
why.
16 C Programming
6. Three major players in operating system design are Microsoft Windows, Linux, and
Apple ios. Prepare a report on these OSs and learn how they are different from each
other.
7. What is a pen drive? To which category of memory system, primary or secondary,
does it belong?
8. Explore several keyboard shortcuts for your computer, create a new file, save a file,
minimize the opened windows, toggle through windows, and other shortcuts that
ease your operating capability.
9. When you shut down your computer, three options are shown in a Windows machine:
shut down, restart, and sleep. What is the use of sleep?
10. Go to your computer settings and explore the detail of several components, such as
system, personalize, account, and network & Internet.
References
1. Sinha, Pradeep K., and Priti Sinha. Computer Fundamentals. BPB Publications, 2010.
2. Randell, Brian, ed. The Origins of Digital Computers: Selected Papers. Springer, 2013.
3. Forouzan, Behrouz A., and Firouz Mosharraf. Foundations of Computer Science. Thomson, 2008.
4. Van Der Poel, W.L. A Simple Electronic Digital Computer. Appl. Sci. Res. 2, 367–400 (1952).
5. Kim, J., S. Seo, D. Jung, J. Kim, and J. Huh, “Parameter-Aware I/O Management for Solid State
Disks (SSDs),” IEEE Trans. Comp., vol. 61, no. 5, pp. 636–649, May 2012, doi: 10.1109/TC.2011.76.
6. Chen, F., R. Lee, and X. Zhang, “Essential Roles of Exploiting Internal Parallelism of Flash
Memory Based Solid State Drives in High-speed Data Processing,” 2011 IEEE 17th International
Symposium on High Performance Computer Architecture, San Antonio, TX, 2011, pp. 266–277, doi:
10.1109/HPCA.2011.5749735.
7. Hu, Y., H. Jiang, D. Feng, L. Tian, H. Luo, and C. Ren, “Exploring and Exploiting the Multilevel
Parallelism Inside SSDs for Improved Performance and Endurance,” IEEE Trans. Comp., vol. 62,
no. 6, pp. 1141–1155, June 2013, doi: 10.1109/TC.2012.60.
Introduction to the Computer
Sinha, Pradeep K. , and Priti Sinha . Computer Fundamentals. BPB Publications, 2010.
Randell, Brian , ed. The Origins of Digital Computers: Selected Papers. Springer, 2013.
Forouzan, Behrouz A. , and Firouz Mosharraf . Foundations of Computer Science. Thomson, 2008.
Van Der Poel, W.L. A Simple Electronic Digital Computer. Appl. Sci. Res. 2, 367–400 (1952).
Kim, J. , S. Seo , D. Jung , J. Kim , and J. Huh , “Parameter-Aware I/O Management for Solid State Disks
(SSDs),” IEEE Trans. Comp., vol. 61, no. 5, pp. 636–649, May 2012, doi: 10.1109/TC.2011.76.
Chen, F. , R. Lee , and X. Zhang , “Essential Roles of Exploiting Internal Parallelism of Flash Memory Based
Solid State Drives in High-speed Data Processing,” 2011 IEEE 17th International Symposium on High
Performance Computer Architecture, San Antonio, TX, 2011, pp. 266–277, doi: 10.1109/HPCA.2011.5749735.
Hu, Y. , H. Jiang , D. Feng , L. Tian , H. Luo , and C. Ren , “Exploring and Exploiting the Multilevel Parallelism
Inside SSDs for Improved Performance and Endurance,” IEEE Trans. Comp., vol. 62, no. 6, pp. 1141–1155,
June 2013, doi: 10.1109/TC.2012.60.
Introduction to C Programming
Ritchie, Dennis M. , “The development of the C language,” ACM Sigplan Notices, vol. 28, no. 3, pp. 201–208,
1993.
Ritchie, Dennis M. , Brian W. Kernighan , and Michael E. Lesk , The C programming language. Prentice Hall,
1988.
Stroustrup, Bjarne , “Sibling Rivalry: C and C++,” (2002).
ISO, LA0 , “ISO/IEC 9899: 2018-information technology–programming languages–C,” (2018).
ISO, ISO , “ISO/IEC 9899: 2011 Information technology—Programming languages— C,” (2011).
Organisation, I. S. , “ISO/IEC 9899: 1999 Programming Languages-C,” (1999).
https://code.visualstudio.com/learn