C/C++ Beginner's Guide and Post Basic Questions here

Liverpool_fan

Sami Hyypiä, LFC legend
So you're willing to write your own code in C or C++, or simply compile someone else's code? This guide has been designed to get you started.

References and Source for some of the content
FAQ: Compiling your first C or C++ programs - Ubuntu Forums
Welcome to FOSS Powered Wiki - FOSS Powered Wiki

Comments and correction of errors will really be appreciated.

1. Make sure the compiler is installed

Basically if you are starting, you are strongly recommended to use standard compilers, like The GNU C Compiler (gcc), LLVM, Microsoft Visual C++, etc. Stay AWAY from antiquated compilers like Turbo C et al, with them you will NEVER learn proper programming* and will develop really horrible practices. This thread will basically cover the GNU C Compiler.
Depending on your operating system, it depends on how to set up your GNU C Compiler. I will mainly focus on the popular operating systems such as Linux and Windows.

Windows

In order to install MinGW, first of all download the executable and execute your downloaded executable in order to facilitate the installation of MinGW. Download the installer from this site.
Make sure you install the packages for gcc and g++ in the installer.
Next make sure you set up the paths properly, this can be done by going to system properties (Properties of My Computer), and set the environment variable PATH by adding the location of the compiler's path. Click on the spoiler to view:
*img4.imageshack.us/img4/8531/path3.png
*img12.imageshack.us/img12/1399/path4.png
*img11.imageshack.us/img11/6822/path5.png
*img18.imageshack.us/img18/1511/path6.png

Mac OS X

Mac OS X users need to install Xcode which you can either get from the App Store. Starting from Xcode 4.3, the Command Line tools are not bundled by default. They can be installed by opening Xcode and going to Preferences --> Downloads --> Components --> Command Line tools.

I'll suggest to use TextWrangler as your preferred text editor.

Ubuntu

Make sure that the build-essential package is installed in the system.
You can install the build-essential package by running the terminal and passing the command.

Code:
sudo apt-get install build-essential

Alternatively you can use the Software Center or Synaptic Package Manager to search build-essential and install it.

OpenSUSE

Open YAST. Go to Software Management.
Change the Filter to 'Patterns' and select C/C++ Compiler and Tools.
Click Accept. And install.

Fedora

Go to terminal as root.
For running it as root, type

Code:
su

Then pass the comand.(exact as in the quotes):

Code:
yum groupinstall "Development Tools" "Legacy Software Development"

Arch Linux

The development packages for C/C++ Programming is already bundled in Arch Linux. However the package is: base-devel. You can use the pacman package manager in case any package or library is missing.

Others

See here: Installing GCC - GNU Project - Free Software Foundation (FSF)

2(a). Write your first C Program

Kick open your IDE/text editor, make sure it is a plain text editor and not a binary editor like the Word Processors or Wordpad in Windows. Only a plain text editor will do. Windows has Notepad, which can be used however Notepad++ or Crimson Editor is recommended due to syntax highlighting and indention support.
Write the following code in it.

PHP:
#include<stdio.h>
 
int main()
{
    printf("Hello, World!");
    return 0;
}
This is a very simple C program. You can save it as an ASCII text file, say myfirst.c. Make sure of the extension it should be [dot]c, preferably lowecase c in *nix.

2(b). Write your first C++ Program
Similarly for C++ you can try the following code.
PHP:
#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}

You can save the file in .cpp extension.

2(c). Compiling

For C
gcc is the C compiler
Obviously, the filaname saved with .c extension is the C source file which the compiler compiles. If you want to compile several source files into a single executable, just list them sequentially delimited by a space.

You can compile a C program with the command in your terminal/Command Prompt.
Code:
gcc myfirst.c -o program.exe
You can replace myfield.c by whichever file you wish to compile.
The -o flag names the name of the executable created, program.exe in this case. If you don't pass that flag and just gcc myfirst.c, then your executable will be a.out in *nix and a.exe in Windows.
Note: Linux users don't need to append .exe at all

For C++
Similarly you can compile a C++ source file by saving it as .cpp and compiling with command:
Code:
g++ myfirst.c -o program.exe

Executing
Execution can be performed by writing the name of the executable created in your Terminal/Command Prompt. Either ./programname in *nix or programname.exe in Windows.

Steps for Windows users:
*img89.imageshack.us/img89/8343/program.png
*img26.imageshack.us/img26/893/savertz.png
*img530.imageshack.us/img530/4053/compile.png

Steps for Mac OS X users:
*img836.imageshack.us/img836/3885/sc1z.jpg
*img259.imageshack.us/img259/2444/sc2n.jpg

Steps for Linux users:
*img152.imageshack.us/img152/9222/screenshot2btw.png
*img2.imageshack.us/img2/3937/screenshot4ymv.png

3. Useful Flags
Following are a few command line switches to enable some warnings and language features (check the man page for detailed information):

-std=gnu99 (C only) This flag enforces the latest C standard (1999) i.e. C99, plus GNU Extensions (this should be explicitely specified)
-ansi This flag checks ANSI compliance
-pedantic This flag issues warnings when strict ISO compatibility is NOT met.
-Wall This flag enables most warnings (very useful, highly recommended)
-Wextra enables more warnings (very useful)
-Wwrite-strings warns when you misuse plain old C string constants (aka. deprecated cast from const char* to char*) (very useful, highly recommended)

I particularly recommend -Wall and -Wwrite-strings, to maximize warnings and common pitfalls. Also remember paranoid programming is good for your code, so never try to ignore warnings.


4. Must Reads
Things to Avoid in C/C++ -- gets() , Part 1 - GIDNetwork
comp.lang.c Frequently Asked Questions
C++ FAQ

5. Some Common Questions Answered

C

Why C?
C is a standard. It is the programmers programming language. It is the standard programming language of GNU and BSD based systems. The majority of these systems and the applications that run on them, is written in C. C was developed over thirty years ago for writing operating systems and applications. It's small, extensible design has allowed it to evolve with the computer industry. Because of it's age and popularity, C is a very well supported language. Many tools exist to make C programming easier and these tools are often very mature and of a high standard. All the software we will use in this book is written in C.
Reference: Why learn C?

C books
If you are willing to buy a printed book, it is strongly suggested to buy 'The C Programming Language by Kernighan and Ritchie' and 'Head First C'. Both are highly recommended. 'C Programming : A Modern Approach' is another fantastic book but an Indian Print is not available and the international edition costs a fortune. These are not absolute beginner guides though. If you are a total beginner, do consider a language like Python before jumping to C. Though if you want to insist with C, go ahead with 'C for dummies'. Pretty much neophyte friendly as it gets. Keep away from books with Non-Standard code, basically just flip through it and if you see void main() or conio.h in it, just keep it back in the shelf.
For online resources on C check these links:
C Programming Language - Free computer books
The GNU C Programming Tutorial
ANSI C Programming: Part 1
C programming.com - Your Resource for C and C++ Programming
comp.lang.c Frequently Asked Questions

C++

Why C++?
C++ is an Object Oriented Programming Language which incorporates the execution speed of C along with OOPS development model which makes it more suitable for large projects.

Can I learn C++ before C?
While you certainly can, however it is highly suggested to first learn sequential and procedural programming concepts in C style, before jumping to the OOPS model of C++. C to C++ is a natural path of learning.

C++ books
There are many great books for C++, 'Thinking in C++' and 'The C++ Programming language' are pretty good books and certainly worth learning. However there are many excellent online resources.
C++ Language Tutorial
Teach Yourself C++ in 21 Days
Bruce Eckel's MindView, Inc: Thinking in C++ 2nd Edition by Bruce Eckel

Editors and IDEs

Editors which offer basic syntax highlighting and indention are recommended. In Windows Notepad++ is an excellent editor, while in Linux you have gedit, kate as GUI editors, and vim, emacs as excellent text based editors.
It's advisable not to use IDEs in the beginning. Stay clear of Netbeans, Eclipse, Anjuta, Visual Studio, MonoDevelop, or any such IDE. Of course, if you are arguing on that, you probably know better and can ignore this advice. One IDE which is suggested is Geany which is basic enough and serves all purposes.


* - You can use them for your school/college, however know which bad practice you are using when you use such compilers and don't depend on them.
 
Last edited by a moderator:

Who

Guess Who's Back
It might be hard to believe (LFC_fan can do something besides trolling) but LFC_fan is right lads,

I however would like to elaborate why exactly we should avoid books by Yashavant P. Kanetkar (Let Us C,Data structures through C,etc) or most indian authors for that matter.

First of all C was actually had invented for Unix by K&R which anyone would know about , TC was made for DOS (DOS compiler) ,it wasn't even intended to be a drop-in sub for ansi-c/gcc/clang/etc, i would say it was a good compiler/IDE Dos however.It is still used in embedded system which use DOS but that's pretty rare nowadays.

So if you are using TC you are wasting time on something so outdated which won't be used beyond your class room, if you are giving interview for a standard company & have no clue of ansi-c/gcc/clang/etc then good luck finding a job.

anyway in summary i would like list out the points why you shouldn't use Yashavant P. Kanetkar or any other indian books for that matter,

1. Like i said before C was written for Unix , yet the author thinks that C was written for Windows DOS, thus your codes are non-portable.

2.Concept like Malloc , Calloc, Free are poorly explained (2 lines actually).

3.Concepts like preprocessor,macros,libraries,memory management , defensive coding etc author thought was too much for our teachers so he decided to skip it (can't hold against him , after all he is a teacher in someways).

4.The books have no history or functionality why the stuff was introduced in the first place, directly jumps to some idiotic fill the blanks , multiple choice, true or false questions (maybe he realize students here need marks so why put details in the first place ? )

5. graphics.h for the ancient turbo c/c++ compiler which enables you to make DOS graphics. programmers had moved on from it 20 years ago. the world is now using opengl and sdl for graphics.

i could go on but i hope by now you guys understand why this books are so bad , it has so many factual errors.


Lastly , i would like to mention a IDE which uses gcc compiler for windows , which served me quite well , called Code::Blocks but again like LFC_fan said it's advisable that you don't(use IDE) at least in the beginning & just stick with Notepad++.
 
Last edited:

furious_gamer

Excessive happiness
Nice initiative LFC_Fan.

When i first create a new thread for Java related queries i didn't explained anything like this. You did a great job there.

And @Who, yes you are right. Yashwant Kanetkar, the one of the most worst author for C. I never suggest anyone this book, but in colleges some professors suggest this for students.

I faced the same and bought this book but never read it for exams and to learn. I always use online resource and it was more than enough to learn stuff to pass in exams. :D
 

Piyush

Lanaya
i have installed minGW
but i cant find any launching icon of the compiler
also i need the details of setting variable path
plz do help
thanks
 

cute.bandar

Cyborg Agent
Can someone suggest an alternative solution to puzzle number 24 from this page . there is a solution given already, but me is wondering if there is another way of solving it . anybody up for the challenge ?
Edit: nvmind i figured out a solution myself :) , using the toggle technique.
 
Last edited:

abhijangda

Padawan
It might be hard to believe (LFC_fan can do something besides trolling) but LFC_fan is right lads,

I however would like to elaborate why exactly we should avoid books by Yashavant P. Kanetkar (Let Us C,Data structures through C,etc) or most indian authors for that matter.

First of all C was actually had invented for Unix by K&R which anyone would know about , TC was made for DOS (DOS compiler) ,it wasn't even intended to be a drop-in sub for ansi-c/gcc/clang/etc, i would say it was a good compiler/IDE Dos however.It is still used in embedded system which use DOS but that's pretty rare nowadays.

So if you are using TC you are wasting time on something so outdated which won't be used beyond your class room, if you are giving interview for a standard company & have no clue of ansi-c/gcc/clang/etc then good luck finding a job.

anyway in summary i would like list out the points why you shouldn't use Yashavant P. Kanetkar or any other indian books for that matter,

1. Like i said before C was written for Unix , yet the author thinks that C was written for Windows DOS, thus your codes are non-portable.

2.Concept like Malloc , Calloc, Free are poorly explained (2 lines actually).

3.Concepts like preprocessor,macros,libraries,memory management , defensive coding etc author thought was too much for our teachers so he decided to skip it (can't hold against him , after all he is a teacher in someways).

4.The books have no history or functionality why the stuff was introduced in the first place, directly jumps to some idiotic fill the blanks , multiple choice, true or false questions (maybe he realize students here need marks so why put details in the first place ? )

i could go on but i hope by now you guys understand why this books are so bad , it has so many factual errors.


Lastly , i would like to mention a IDE which uses gcc compiler for windows , which served me quite well , called Code::Blocks but again like LFC_fan said it's advisable that you don't(use IDE) at least in the beginning & just stick with Notepad++.

yes, i agree with u.
I read Let Us C, but didn't liked that book. This book was preferred by our teachers in my college. But I studied Programming with C by Gottfried. Although, I already have a good background of programming in Python and Visual Basic. So, studying C was not difficult for me. But if you dont have any programming background and C is your first programming language. Then dont go with Let Us C, as you cannot find out approach of solving a problem. Instead refer foreign authors.
 
OP
Liverpool_fan

Liverpool_fan

Sami Hyypiä, LFC legend
^ Click on the Show buttons with the Spoilers. Those illustrate those very questions. And oh this is just a compiler, no launching IDE,etc. If you want IDE, Geany will couple well with MinGW - Geany - FOSS Powered Wiki
 

mohityadavx

Youngling
I am a student and can't understand why the author of this post is telling us not to use turbo C++ thats the compiler they teach us in school and college:shock:
 
^^ because tc++ is ::>
a dinosaur compiler,
does not meet current compiling standards,
lousy memory management,
does not generate 32 bit or 64bit exe's
will provide help that has bunch of deprecated and harmful functions
the teacher(s) in colleg dont know what actual industry standards are

u on the other hand must know proper coding techniques and actually understand the standards

Standard ECMA-372
 

furious_gamer

Excessive happiness
I am a student and can't understand why the author of this post is telling us not to use turbo C++ thats the compiler they teach us in school and college:shock:

If its been used by your staffs in college doesn't mean that TC++ is a good compiler. It has lot of loop-holes which was mentioned by @arpanmukherjee1 very well.

Still there are lot of compilers out there which literally tear TC++ into pieces by its performance and features, and whatever fact there is. That's why @OP suggested not to use TC++.

So better get MinGW or any other equivalent compiler.
 

Ron

||uLtiMaTE WinNER||
Bookmarked!

Why does the memory allocation of data type in changes with platform? What role Win 32/64 bits plays in size of data type.

In Sumita Arora the size of int is decalred as 2 bytes however in walter savich its 4 bytes. What is the cause of differnce?

I m using Win 7 64 bit window where i m able to cout the int value greater than 65535? Any reason for that
 
Why does the memory allocation of data type in changes with platform? What role Win 32/64 bits plays in size of data type.

that`s a very good question.
int itself is mapped acc. to compiler. 32 bit compiler generates _int32 and 64 bit generates _int64. but after compilation it is not changed. _int32 will not run as _int64 on 64 bit machine and _int64 will be truncated on 32 bit machine.

to avoid confusion use ::> C++ Sized Integer Types

also note not all data types work in this fashion
see :
int on a 64-Bit machine
How INT_PTR datatype works between 64Bit and 32Bit
BigArray<T>, getting around the 2GB array size limit - SpankyJ - Site Home - MSDN Blogs

In Sumita Arora the size of int is decalred as 2 bytes however in walter savich its 4 bytes. What is the cause of differnce?

Data Type Ranges (C++)

int is 4 bytes. forget sumita arora.

I m using Win 7 64 bit window where i m able to cout the int value greater than 65535? Any reason for that

65535 is max for unsigned 16bit int. default is int32 hence the greater range.

*img25.imageshack.us/img25/4327/part1arc.jpg
 
Last edited:

nims11

BIOS Terminator
Why to avoid global variables? any major reason other than code clarity and avoiding any confusion. i find it tempting to use global variables as it becomes quite easier for my functions to access and change it without the use of pointers but i try resist this temptation because people saying "global variable are bad".
 
OP
Liverpool_fan

Liverpool_fan

Sami Hyypiä, LFC legend
Global variables are bad because every function (and class method) can change it and there may be changes to it which you didn't expect.
 

Ron

||uLtiMaTE WinNER||
Global variables are bad because every function (and class method) can change it and there may be changes to it which you didn't expect.

Bro can u elaborate with an xample

---------- Post added at 12:56 AM ---------- Previous post was at 12:55 AM ----------


2arpanmukherjee1
thnks bro

---------- Post added at 01:03 AM ---------- Previous post was at 12:56 AM ----------

Output Problem

cout<<a++<<a++<<b--<<--b<<++b<<--b;

I m havin problem in assumin the ouput of such syntax. Usullly i get unexpected results. Any reason for tht and way to encounter it?
 
Top Bottom