close

Learn C Programming Language

The Definitive Guide

Learn C programming

C programming is a powerful general-purpose language. It is fast, portable and available in all platforms.

If you are new to programming, C is a good choice to start your programming journey.

This is a comprehensive guide on how to get started in C programming language, why you should learn it and how you can learn it.

What is C (Programming Language)? - The Basics

http://www.programiz.com/

Before getting started with C programming, lets get familiarized with the language.

C is a general-purpose programming language used for wide range of applications from Operating systems like Windows and iOS to software that is used for creating 3D movies.

C programming is highly efficient. That’s the main reason why it’s very popular despite being more than 40 years old.

Standard C programs are portable. The source code written in one system works in another operating system without any change.

As mentioned, it’s a good language to start learning programming. If you know C programming, you will not just understand how your program works, but you will also be able to create a mental picture on how a computer works.

More information on C Language.

History of C programming

C is closely associated with Unix Operating system

Development of Unix System

The PDP-11 version of Unix system was written in assembly language. Assembly languages are low-level programming languages that are specific to a particular computer architecture. They are hard to write and understand. 

The developers of Unix Operating system (including Dennis Ritchie and Stephen C. Johnson) decided to rewrite the system in B language. However, B couldn’t suffice some of the features of PDP-11, which led to the development of C language. 

In 1972, the development of C started on the PDP-11 Unix system. A large part of Unix was then rewritten in C. By 1973, the C was powerful enough to be used in Unix Kernel. Dennis Ritchie and Stephen C. Johnson made further changes to the language for several years to make it portable in Unix Operating system.

First Book on C Programming

In 1978, the first book of C programming, The C Programming Language, was published. The first edition of the book provided programmers informal specification of the language for many years. Written by Brian Kernighan and Dennis Ritchie, this book is popular among C programmers as "K&R".

ANSI C

With the rapid growth of C language for several years, it was time for language to get standardized.

C89. The first standard of C was published by American National Standards Institute (ANSI) in 1989. This version is commonly popular as C89. 

C99.  In late 1990’s, several new features like inline functions, several new data types and flexible array-members were added to the C standard. This is commonly known as C99. 

C11. The C11 standard has new features like type generic macros, atomic operations, anonymous structures that doesn’t exist in C99.

All these three standards are also known by the name of ANSI C.

“Standard C programs are portable”. This means, the programs that follow ANSI C standard are portable among operating systems. 

If you are new to programming, it’s advisable to follow the standard (ANSI C in case of C programming) that is accepted everywhere. It will help you learn the language the way it was intended.

Features of C Programming Language

A procedural language.

In procedural languages like C, a list of predefined instructions are carried out step by step. A typical C program may contain one or more procedures (functions) to perform a task. If you are new to programming, you might think this is the only way all programming languages work.

However, there are other programming paradigms as well. One of the commonly used paradigms is Object-oriented programming (OOP) which allows developers to create objects to solve the given task. If you are interested, check out the differences between procedural and object oriented languages.

C programs are fast.

Newer languages like Python and Java offer more features (garbage collection, dynamic typing ) than C. This makes it easier for programmers to write programs. However, the performance lowers due to additional processing. 

C language trusts programmers and allows direct manipulation of the computer hardware. This is not possible in most high-level programming languages. It’s one of the reasons why C is considered good choice to start learning programming.

Standard C programs are portable.

“Write once, compile everywhere”. Well-written standard C programs are portable, meaning, programs written in one system (e.g. Windows 7) can be compiled in another system(e.g. Mac OS) without any  change. 

Use of Modularity.

You can store sections of C code in libraries for future use. This concept is known as modularity.

C itself can do very little on its own. The power of C language comes from its libraries. C comes with standard libraries to solve common problems. Suppose, you need to display something on the screen, you can include “stdio.h” library that allows you to use printf() function. 

Statistically typed language.

C is a statically typed language. This means that the type of a variable is checked during compile time but not in run-time. This helps in detection of errors during the software development cycle. Also, the statistically typed languages are faster than dynamically typed language in general.

General purpose.

Despite being old, C is used in variety of applications from system programming to photo editing softwares. Some of the applications where C programming is used are as follows:

  • Embedded Systems
  • Operating System - Windows, Linux, OSX, Android, iOS
  • Databases - PostgreSQL, Oracle, MySQL, MS SQL Server
  • Other Uses - Network drivers, Compilers, Print spoolers

 

Should you learn C programming?

http://www.programiz.com/

If only it were possible to answer this question with a simple “yes” or “no”. Unfortunately, it’s not an easy question to answer and varies from person to person.

Personally speaking, I love C programming. It is a good language to start your programming journey if you are a newbie. If you are an experienced programmer, I recommend you to learn it at some point; it will certainly help.

What will you gain if you learn C?

If you don’t know C, you don’t know what you are doing as a programmer. Sure, your application works fine and all. But, if you can’t say why while (*s++ = *p++); copies a string, you’re programming on a superstition. (Joel Spolsky’s words, not mine).  

  1. You will understand how a computer works.

    If you know C, you will not only know how your program works but, you will be able to create a mental model on how a computer works (including memory management  and allocation). You will learn to appreciate the freedom that C provides unlike Python and Java. 

    Understanding C allows you to write programs that you never thought were possible before (or at the very least, you will have a broader understanding of computer architecture and programming as a whole).
     
  2. C is the lingua franca of programming.

    Almost all high-level programming languages like Java, Python, JavaScript etc. can interface with C programming. Also, it’s a good language to express common ideas in programming. Doesn’t matter if the person you are talking with doesn’t know C, you can still convey your idea in a way they can understand.  
     
  3. Opportunity to work on open source projects that impact millions of people.

    At first, you may overlook the fact that C is an important language. If you need to develop a mobile app, you need Java (for Android), Swift and Objective C (for iOS). And there are dozens of languages like C#, PHP, ASP.net, Ruby, Python for building web application. Then, where is C programming?

    Python is used for making wide range for applications. And, C is used for making Python. If you want to contribute to Python, you need to know C programming to work on Python interpreter that impacts millions of Python programmers. This is just one example. A large number of softwares that you use today is powered by C. 

    Some of the larger open source projects where C programming is used are Linux Kernel, Python Interpreter, SQLite Database.

    Another language that’s commonly used for large open source project is C++. If you know C and C++, you can contribute to large open source projects that impacts hundreds of millions of people. 
     
  4. You will write better programs.

    To be honest, this statement may not be true all the time. However, knowing how computer works and manage memory gives you insight on how to write efficient code in other programming languages. 
     
  5. You will find it much easier to learn other programming languages.

    A lot of popular programming languages are based on C (and C++, considered superset of C programming with OOP features). If you know C, you will get a head start learning C++.

    Languages like C# and Java are related to C and C++. Also, the syntax of JavaScript and PHP is similar to C. 

    If you know C and C++ programming, you will not have any problem switching to another language. 
     

Reasons not to learn C programming

You can create awesome softwares without knowing C programming at all. Jeff Atwood, one of the creators of Stackoverflow.com, apparently doesn’t know C and Stack Overflow is a damn good web application.

If you are busy and don’t want to invest time on something that doesn’t have direct effect on your day-to-day work, C programming is not for you.

Also, if you are a newbie and want to start learning programming with an easier language (C is not the easiest of language to learn), you can start with Python.   

Verdict on whether to learn C programming or not

For newbie:

For many, C programming is the best language to start learning programming. However, if you want to start with an easier language which is clean and easier to grasp, go for Python.

For experienced programmers:

It’s not absolutely essential but there are perks of learning C programming.

Don’t leave your current project immediately (I know you won’t) to learn C. You can learn it when you have free time and want to expand your programming skills. 

I believe, it’s not necessary to learn C immediately. However, you should learn C eventually.

Compile and run C programming on your OS

http://www.programiz.com/

There are numerous compilers and text editors you can use to run C programming. These compilers and text editors may differ from system to system. 

You will find the easiest way to run C programming on your computer (Windows, Mac OS X or Linux) in this section.

Run C program Online

There are several sites that allows you to run C programming online. The one I prefer is ideone.com.

To run C programming in Ideone.com, select C language at the bottom of the editor, write C code and click Run.

It should be noted that, online C compilers are limited (you can’t work with files, taking input from the user is not natural and so on).

Run C Programming in Mac OS X

  1. Go to download page of apple developer site.
    Download X Code from Apple developer site
  2. Click the download Xcode link. It’s recommended to download the latest version even if it’s in beta.
  3. When download is completed, open Xcode and follow the wizard to install it. You might want to put the Xcode in Applications for future use.
  4. Then, open Xcode and go to File > New > Project.
    Navigate to project
  5. Under OS X section, choose Application, choose Command Line Tool and hit next.
    Command line tool under OSX application
  6. Provide the Product Name, for example: Hello. And, choose C under Language section. Then, click next.
  7. Choose the location where you want to save the project in your Mac. You can uncheck Create Git repository button and click create.
  8. Navigate to main.c file in the screen where you can see default code provided by XCode.
    main.c file in Xcode
  9. Change the code as you wish. And finally to run the code, go to Product > Run or simply hit Cmd + R.
  10. By default you will see the output at the bottom of your screen.

Run C programming on Linux

To run C programming on Linux, you need:

  • a compiler. We’ll install GNU GCC compiler which is good for beginners.
  • development tools and libraries.
  • a text editor (gEdit works just fine for our purpose). Or, you can download text editor of your choice.

Here’s a step by step guide to run C in Linux (Ubuntu, Debian, CentOS, Fedora, Red Hat and Scientific Linux):

  1. Open the terminal and issue the following command.
    For Ubuntu and Debian distribution:
    $ sudo apt-get update
    $ sudo apt-get install build-essential manpages-dev
    For CentOS, Fedora, Red Hat and Scientific Linux:
    # yum groupinstall 'Development Tools'
    
    This installs GNU GCC compiler and related tools on your system.
  2. To verify if gcc compiler is installed, issue the command.
    $ gcc --version
    If you get output similar like this, gcc is correctly installed on your system.
    Check gcc version in linux
  3. Open the text editor of your choice and save a file with .c extension. I made hello.c file using gEdit.
    C code in gEdit text editor
    If you are a linux wizard, feel free to use vim or emacs. Any editor is fine but, don’t forget to use .c extension; it’s important.
  4. Switch to the directory where the file is located. And, issue the following command.
    $ gcc program-source-code.c -o  name-of-your-choice
    Here, program-source.code.c is the filename you chose before. And, name-of-your-choice can be any name you prefer. In my case, I issued the following command. $ gcc hello.c -o hello
  5. If there is no error, an executable file named is created; hello is my case.
  6. Finally, you can see the output using following command.
    $ ./hello
    
    C code output in linux using terminal As you might have imagined, you need to use the name of executable file you chose before. Also, you need to use path to the execute file if you are in a different directory.

Run C Programming in Windows (XP, 7, 8 and 10)

To run C Programming in Windows, download a software called Code::Blocks. Then, write C code, save the file with .c extension and execute the code.

To make this procedure even easier, follow this step by step guide.

  1. Go to the binary release download page of Code:Blocks official site.
  2. Under Windows XP / Vista / 7 / 8.x / 10 section, click the link with mingw-setup (highlighted row) either from Sourceforge.net or FossHub.
    Download Code::Blocks in Windows
  3. Open the Code::Blocks Setup file and follow the instructions (Next > I agree > Next > Install); you don’t need to change anything. This installs the Code::Blocks with gnu gcc compiler, which is the best compiler to start with for beginners.
  4. Now, open Code::Blocks and go to File > New > Empty file (Shortcut: Ctrl + Shift + N)
    Create empty file in Codeblocks
  5. Write the C code and save the file with .c extension. To save the file, go to File > Save (Shortcut: Ctrl + S).
    Important: The filename should end with a .c extension, like: hello.c, your-program-name.c
    Create file with .c extension in Codeblocks to run C programming
  6. To run the program, go to Build > Build and Run (Shortcut: F9). This will build the executable file and run it.

If your program doesn’t run and if you see error message "can't find compiler executable in your search path(GNU GCC compiler)", go to Settings > Compiler > Toolchain executables and click Auto-detect. This should solve the issue in most cases.

 

The fun begins: Your first C program

http://www.programiz.com/

You will learn to write a “Hello, World!” program in this section.

Why “Hello, World!” program?

“Hello, World!” is a simple program that displays “Hello, World!” on the screen. Since, it’s a very simple program, it is used to illustrate the syntax of the programming language.

This program is often used to introduce programming language to a beginner. So, let’s get started. 


#include <stdio.h>
int main()
{
    printf("Hello, World!\n");
    return 0;
}

How “Hello, World!” program works?

Include stdio.h header file in your program.

C programming is small and cannot do much by itself. You need to use files that are necessary to run the program. The stdio.h is a header file and C compiler knows the location of that file. To use the file, you need to include it in your program using #include preprocessor.

Why you need stdio.h file in this program?

In this program, we have used printf() function which displays the text inside the quotation mark. To use printf(), you need to include stdio.h.

The main() function

In C programming, the code execution begins from the start of main() function (doesn’t matter if main() isn’t located at the beginning).

The code inside the curly braces { } is the body of main() function. The main() function is mandatory in C program.

int main() {
}

This program doesn’t do anything but, it’s a valid C program.

The printf() function

The printf() is a library function that sends formatted output to the screen (displays the string inside the quotation mark). Notice the semicolon at the end of the statement.

In our program, it displays Hello, World! on the screen.

Remember, you need to include stdio.h file in your program for this to work.

The return statement

The return statement return 0; inside the main() function ends the program. This statement isn’t mandatory. However, it’s considered good programming practice to use it.

Key notes to take away

  • All C program starts from the main() function and it’s mandatory.
  • You can use the required header file that’s necessary in the program. For example: To use sqrt() function to calculate square root and pow() function to find power of a number, you need to include math.h header file in your program.
  • C is case-sensitive; the use of uppercase letter and lowercase letter have different meanings.
  • The C program ends when the program encounters the return statement inside the main() function. However, return statement inside the main function is not mandatory.
  • The statement in a C program ends with a semicolon.

Teach Yourself to Code in C

http://www.programiz.com/

Learn C from Programiz

Programiz offers dozens of tutorials and examples to help you learn C programming from scratch.

This tutorial is designed for beginners who do not have any prior knowledge of C programming (or, any other programming languages). Each tutorial is written in depth with examples and detail explanation.

If you are serious about learning programming (any programming language including C), you should get yourself a good book. 

Granted, reading a 600 page long programming book takes a lot of time and patience. But, you will get the big picture of programming concepts in the book which you may not find elsewhere.

Here are 3 books we personally recommend.

The C Programming Language (2nd Edition)

This book provides the complete guide to ANSI standard C language.

Most importantly, it’s co-written by Dennis M. Ritchie, creator of C programming language.

C Programming: A Modern Approach (2nd Edition)

Personally I believe, this is the best book for beginners.

This book is clear and comprehensive. Also, the Q&A section at the end of each chapter makes this book a must have for beginners. 

C Pocket Reference (1st Edition)

As suggested by the name, it’s a small book for reference.

Don’t want to search pages and pages to look for a small information? Get this book.

Learn C programming, the right way

http://www.programiz.com/

Fact: You cannot learn C programming in a day. You might have difficulty grasping the important concepts if you try to learn C programming faster.  

If you just learn the syntax and dive in, your C code may work but you’ll not end up learning C programming the right way.,  

Don’t just look at the example code, run it in your system

Programiz has dozens of examples that will help you understand C programming. However, if you are reading it just like a novel without running it in your system, you are doing it wrong.

If you want to learn a new feature of C programming, try to write code related to that feature. If you can’t, copy code from Programiz and run it in your system. Then, try to understand it. Once you understand it, modify the code, make it different and run it again.

Learn to use a Debugging tool

A debugging tool or debugger is a software (that’s already available in IDE) which allows programmers to stop a program at any point and helps to detect and correct errors.

When you have bugs in your program, rather than scratching your head to find the bug, you can use debugger to stop program at any point and find the value of variables to detect the bug. 

Knowing how to use a debugger is an important skill that every programmer should learn. 

Learn the feature the way it is intended 

Imagine a situation: It’s possible to solve a problem with an array. Also, you can solve that problem with a structure. Technically, both are correct, which will you use?

To answer this question, you should have good knowledge of when to use an array and when to use a structure.

If you are switching to C from a different language, let’s say C#. You do not want to write C# style code with C syntax in your C program.

Join C communities

Once you get the hang of writing simple C programs, join online communities and forums. You can help other programmers where you can and ask for help when you are stuck. 

Communities Programiz recommend you to join:

Always follow good programming practice     

Good programming practice are the informal rules which can improve quality and decrease development time of the software. 

Some of the programming practices mentioned here are valid in all programming languages whereas some are valid only for C programming. 

Be consistent with the formatting. 

The number of spaces you used in the program doesn’t matter in C. However, that doesn’t mean you should use different number of spaces at different places. Also, use proper indentation so that the code is easier to understand. 

Use one statement per line.

What’s wrong with the following code?

int count; float squareRoot = 10.0; printf(“Square root = %f”, squareRoot);

Actually, the code is perfectly valid. But, wouldn’t this be better:


int count;
float squareRoot = 10.0;
printf(“Square root = %f”, squareRoot);

The goal here is to write code that your fellow programmers can understand.

Naming convention and Consistency!

Give a proper name to variables and functions and be consistent with it. 

int a, b;

Here, a and b are two variables and I have no idea what they do. Instead you can choose name like:

int counter, power; 

Also, follow a convention while naming. For example:

int base_number, powerNumber;

Both conventions: using _ to separate words and using capital letter after first word is popular. However, don’t use both in one program; choose one and be consistent with it.

Start Habit of Using Comments

Comments are part of code that compiler ignores.

You can use comments in your program to explain what you are trying to achieve in your program. This helps your fellow programmer to understand the code.

You can use comments in C programming by using //. For example:


// My first C program

#include <stdio.h>
int main()
{
    printf("Hello, World!\n");   // displays Hello, World! on the screen
    return 0;
}

“Commenting your code is like cleaning your bathroom - you never want to do it, but it really does create a more pleasant experience for you and your guests.” 

— Ryan Campbell

We at Programiz think C is a terrific language to learn.

If you are a beginner, it’s a good language to start learning programming. And, if you are a professional programmer with a tight schedule, learn it at your leisure; it will certainly help your brush up on programming basics.