94 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: C++ Compilers
 | |
| ---
 | |
| 
 | |
| # Intro to C++ Compilers
 | |
| 
 | |
| In order to get started with C++, you will need to learn a little about compilers and how C++ runs on your computer.
 | |
| 
 | |
| When all is said and done, computers only understand one language, machine language. Machine language is entirely made up of
 | |
| binary bits, or 0s and 1s. While it would be possible to program in binary, it would be incredibly tedious and time consuming. 
 | |
| So, we humans developed programming languages to make it easier to develop software. Assembly language is a direct 1 to 1 with machine
 | |
| language. Languages like C, C++, and COBOL are a little higher and need to be compiled down. It goes even higher. Languages
 | |
| like JavaScript and Python have components that get translated into C++ or other low level languages before they get compiled, 
 | |
| effectively making them "higher" languages than C or C++.
 | |
| Because computer architecture is made up of electronic switches and cables that can only work with binary 1s and 0s,
 | |
| you need a compiler to translate your code from high level C++ to machine language that the CPU can understand.
 | |
| 
 | |
| Compilers are utility programs that take your code and transform it into executable machine code files. When you run a compiler
 | |
| on your code, first, the preprocessor reads the source code (the C++ file you just wrote). The preprocessor searches for any
 | |
| preprocessor directives (lines of code starting with a #). Preprocessor directives cause the
 | |
| preprocessor to change your code in some way (by usually adding some library or another C++ file). 
 | |
| Next, the compiler works through the preprocessed code line by line translating
 | |
| each line into the appropriate machine language instruction. This will also uncover any syntax errors that are present in your
 | |
| source code and will throw an error to the command line. Finally, if no errors are present, the compiler creates an object 
 | |
| file with the machine language binary necessary to run on your machine. While the object file that the compiler just created
 | |
| is likely enough to do something on your computer, it still isn't a working executable of your C++ program. There is a final
 | |
| important step to reach an executable program.
 | |
| 
 | |
| C++ contains a vast library to aid in performing difficult tasks like I/O and hardware manipulation. You can include these 
 | |
| libraries with preprocessor directives, but the preprocessor doesn't automatically add them to your code. In order for you to have 
 | |
| a final executable program, another utility known as the linker must combine your object files with the library functions
 | |
| necessary to run the code. Think of it as having all the necessary blocks
 | |
| to build a house. The compiler made all the blocks but the linker is the one that sticks them all together to finally create a house.
 | |
| Once this is done, you now have a functioning executable file!
 | |
| 
 | |
| 
 | |
| ## How to Compile a file
 | |
| Let's say you have a C++ file called `helloWorld.cpp` ...
 | |
| 
 | |
| ### If you are on Windows -- 
 | |
| 
 | |
| #### Using and IDE like CodeBlocks
 | |
| 
 | |
| It is as simple as clicking the build and run buttons, they will create a file in the project folder.
 | |
| 
 | |
| 
 | |
| #### Using Command Prompt
 | |
| 1. Open a Developer Command Prompt - For this step, you will need to have Microsoft Visual Studio or some other IDE that 
 | |
| enables you to compile your program from the command line. You can also search online for C++ compilers.
 | |
| 
 | |
| 2. Navigate to the source code directly
 | |
| 
 | |
| 3. Run the Compiler on your source code (assuming you are using the Microsoft Visual Studio compiler)
 | |
| `cl /EHsc helloWorld.cpp`
 | |
| 
 | |
| This will now create an object file and automatically link it for you. If you look in that same folder, you will see a 
 | |
| hellWorld.exe executable file (note the exe extension) is now present.
 | |
| 
 | |
| 4. Type `helloWorld` into the prompt to run the executable
 | |
| 
 | |
| Alternatively, many IDEs allow for quick building and viewing of your program. This may be easier since your version of 
 | |
| windows may not come pre packaged with a compiler utility. 
 | |
| 
 | |
| ### If you are on Linux or OSX -- 
 | |
| 1. Open up a terminal window and navigate to the source code directory
 | |
| 2. Run the Compiler on your source code
 | |
| `g++ helloWorld.cpp -o helloWorld`
 | |
| 
 | |
| This will create an object file and automatically link it for you. Look in the folder and you will see a helloWorld.exe 
 | |
| executable file (note the exe extension). 
 | |
| 
 | |
| 3. Type `./helloWorld` in the terminal window to run the executable file
 | |
| 
 | |
| g++ is the standard Linux compiler and is a great utility. It comes packaged with the operating system.
 | |
| 
 | |
| NOTE:
 | |
| to compile and execute your code directly, run
 | |
| `g++ -o helloWorld helloWorld.cpp; ./helloWorld`
 | |
| so when you need to compile and run your code multiple times,
 | |
| up arrow-enter 
 | |
| 
 | |
| ### Adding Flags
 | |
| You can also add flags to the compiler to your custom and favor. For example:
 | |
| `g++ -O2 helloWorld.cpp -o helloWorld`
 | |
| Some common flags is :
 | |
| 1. -O2 : Optimize your code, so it may run faster
 | |
| 2. -std=c++11 : use c++11 instead of c++98 which is defaulted.
 | |
| 3. -Wall: prompt some warning about some common mistakes which can bug your program.
 | |
| 4. -Wextra: prompt some extra warning.
 | |
| ____________
 | |
| 
 | |
| There are a number of different types of compilers. The two listed are the two that are usually packaged with the Windows
 | |
| or Linux/OSX.
 |