C is a imperative (procedural) language that was created by Dennis Ritchie used to develop software like operating systems, databases, compilers, and so on.
What do we mean when we say imperative (procedural)? We first need to understand different paradigm of programming language and paradigm just means the style in which they are written of structured.
There are different types programming language paradigm, some of them are:
Of these paradigm we just need to know the two of them for c language.
Imperative programming: a set of instructions that are given to the computer to execute in a given order.
Procedural Programming: is a derivation of imperative programming, adding to it the feature of functions (also known as "procedures" or "subroutines").
A good amount of embedded programming is done in C (Hardware programming)
it fastest language that is high level enough to build practical things.
With the appropriate libraries, you can truly use C for anything.
Web Backend Development.
Desktop App Development.
Operating Systems and Drivers.
Before we start learning c language we first need to understand the compilation process and the commands used on each process.
The tool we are going to be using in this blog to compile c is gcc tool.
The process of compilation this like this in order:
preprocessor: takes the source code(.c file) to generate intermediate file that is sent to compiler.
Compiler: convert the intermediate code in to assembly code.
Assembler: convert the assembly code in to an object code.
Linker: link the object code with the necessary library to generate the executable file.
Now let's see each one of them individually.
Preprocessor: takes the source file to generate the intermediate file by:
Remove the comments
include header file's code in the file
Replace macro names with code
Now that we created the source code we need to preprocess it and we do that by the command
gcc -E <FILE_NAME>
we can also use the
-o function to output into a file.
Compiler: takes the source code to convert it into an assembly code and the command we are going to use is:
gcc -c <FILE_NAME>
Assembler: convert the assembly code into binary code 0's and 1's or machine code and the command we are going to use is:
gcc -S <FILE_NAME>
Linker: linker's includes some of the library files into the program to create an executable file and the command we are going to use is:
Now that we learned about the compilation process, we need to understand the gcc compiler.
GCC (GNU Compiler Collections) is a compiler mainly used for C and C++ language.
-o : is an option to specify the output of the file.
-Werror: is an option to show the warning if any error is there in the program.
-Wall: is an option to show all kind of warning like unused variables errors.
-std=: is an option to set the standard(version) of c to compile source file.
Tip : For more information on gcc compiler use the command
man gccto read the manual.
Now we finished learning about compilation process and gcc compiler, we need to get our hand dirty and start codding in c.
The first thing we need to do is learn the most common style of writing c language and how to document them,For this course we need to use the Linux kernel coding style Linux style.
Hello world code
The structure of a hello world code
#include <stdio.h> is the header file that define the input output routines used by a program.
int main(void) is the entry point of our program
printf("Hello world") is a line that print the text
used to document you code and some of c language commenting syntax are:
/* comment */
/* * muti line * commnet */
Warning: you can not nest a comment in a comment
Used to connect a value to a symbol
Names of variables: [a-zA-z_][a-zA-Z_0-9]*
int var; char c;
Tip: for more info on data type read Data Type
some of the modifiers used in c are long, long long,short,unsigned and signed.
They are used to specify how much space the variable take on memory.
long, long long : are used to extend the space used on the system and can be used with int, double.
short: takes half the space on the system.
signed: support both positive and negative numbers, we can use it with int, char.
unsigned: support only positive numbers, we can use it with int,char.
This function is used to find out how a much size types use.
Is a way of converting one type of data into another.
char c = 'a'; int i = 5; int_num = (int)c; float_num = (float)i;
we essentially converted the char into int and the int into float.
Used for printing or writing a statement on to the stdout.
printf("hello world") printf("string:%s deciaml:%d float:%f char:%c","name",12,2.6,'C');
special symbols like %s,%d and %f are used to represent different data's that are imputed to the right of the main string.
Does not include null character inputs to write or print to stdout.
Used to write a character, of unsigned char type, to stdout.
char i = 'a'; putchar(i);
putchar can sometimes be used to print digit's,To do this we need using ASCII value of '0'.
int i = 10; putchar(i + '0');