0% found this document useful (0 votes)
68 views

Programming in C: Getting To Know Your Compiler (GCC)

it says about compiler

Uploaded by

Raju Sake
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views

Programming in C: Getting To Know Your Compiler (GCC)

it says about compiler

Uploaded by

Raju Sake
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 35

Programming in C

Getting to Know Your Compiler (GCC)

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Getting to know your Compiler


GCC

GNU C Compiler http://www.gnu.org/


OMG! MY HERO!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Getting to know your Compiler


GCC

Distributed by the Free Software Foundation under the GNU GPL (General Public License)

Free as in Freedom

Originally developed by Richard Stallman Release 1987 Originally only compiled C

More languages were added later

Many people credit GCC with the massive participation in OpenSource projects world wide!
Programming in C

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

What you already know gcc <codefile> -o <outputfile> What happens if gcc <codefile>

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

What the &*#$ is a.exe????


Default output filename in Windows GCC

UNIX-Like systems use: a.out

If you do not specify an output file name (-o) this

will be the default


C:\temp>gcc test.c C:\temp>dir /w Volume in drive C has no label. Volume Serial Number is FFFF-0000 Directory of C:\temp [.] [..] a.exe test.c 2 File(s) 25,943 bytes 2 Dir(s) 64,727,846,912 bytes free

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

What the &*#$ is a.exe????


Default output filename in Windows GCC

UNIX-Like systems use: a.out

If you do not specify an output file name (-o) this

will be the default


C:\temp>a.exe Hey, Buddy!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

What the &*#$ is a.exe????


a.out is an old UNIX file format Stands for: Assembler Output Even though GCC defaults to the a.out file name,

this file is NOT in the a.out file format standard

Just kept it for Ol Time Sake!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Not All Compilers are Created Equal!


Some compiler configurations can be picky

Depends on

Vendor User settings Version Standard Operating System System Architecture

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

C Standard #include <stdio.h> int main() { for(int i = 0; i < 10; i++) printf("%d\n", i); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

C Standard #include <stdio.h>


C:\temp>gcc test.c test.c: In function 'main': test.c:5:2: error: 'for' loop initial declarations are only allowed in C99 mode test.c:5:2: note: use option -std=c99 or std=gnu99 to compile your code

int main() { for(int i = 0; i < 10; i++) printf("%d\n", i); return 0; }


Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

C Standard: ANSI C #include <stdio.h>

int main() { int i; for(i = 0; i < 10; i++) printf("%d\n", i); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

C Standard: C99
C:\temp>gcc test.c std=c99

#include <stdio.h>

int main() { for(int i = 0; i < 10; i++) printf("%d\n", i); return 0; }


Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

C:\temp>a.exe 1 2 3 4 5 6 7 8 9

Programming in C

C Options: Setting the STD


-ansi

Force ANSI Standard Set C Standard

-std

-std=c89

ISO C89 (same as ansi) ISO C99 Default standard: ISO C89 plus GNU extensions (has some C99 features) ISO C99 plus GNU extensions
Programming in C

-std=c99

-std=gnu89 -std:gnu99

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Warning Suppression #import <stdio.h> int main() { printf("Hey, Buddy!\n"); return 0; }

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Warning Suppression #import <stdio.h> int main() { printf("Hey, Buddy!\n"); return 0; C:\temp>gcc test.c } test.c:1:2: warning: #import is a deprecated GCC
extension

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Warning Suppression #import <stdio.h> int main() { printf("Hey, Buddy!\n"); return 0; C:\temp>gcc test.c w }
C:\temp>

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Warning Suppression #import <stdio.h> int main() { printf("Hey, Buddy!\n"); Works in SOME compilers return 0; C:\temp>gcc test.c Wno-import }
C:\temp>

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Warning Suppression #import <stdio.h> int main() { printf("Hey, Buddy!\n"); Works in SOME compilers return 0; C:\temp>gcc test.c Wno-depreciate }
C:\temp>

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

The Boolean Controversy


Not every compiler allows BOOL data type by

default DO NOT WORRY!!!!!!!

BOOL is the same as integers


0 = FALSE 1 = TRUE

BOOL and INT are interchangeable in C Source code

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

The Boolean Controversy


How to BEAT the Boolean Controversy!

(1) Use Integers in place of bool (2) Use the <stdbool.h> header

Requires C99 standard Technically the same as (1), but a little more crafty!

(3) Create your own using preprocessor macros!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

The Boolean Controversy #include <stdio.h> int main () { bool b = (10 == 10); printf("The answer is %d\n", b); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

The Boolean Controversy #include <stdio.h> int main () { bool b = (10 == 10); printf("The answer is %d\n", b); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

test.c: In function 'main': test.c:5:2: error: 'bool' undeclared (first use in this function) test.c:5:2: note: each undeclared identifier is reported only once for each function it appears in test.c:5:7: error: expected ';' before 'b' test.c:6:31: error: 'b' undeclared (first use in this function)

Programming in C

The Boolean Controversy #include <stdio.h> int main () { int b = (10 == 10); printf("The answer is %d\n", b); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

bool b = true; SAME AS int b = 1; bool b = false; SAME AS int b = 0;

Programming in C

The Boolean Controversy #include <stdio.h> #include <stdbool.h> int main () { bool b = (10 == 10); printf("The answer is %d\n", b); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

The Boolean Controversy


#include <stdio.h> #define bool int #define true 1 #define false 0 int main () { bool b = (10 == 10); bool bTrue = true; bool bFalse = false; printf("The answer is %d\n", b); return 0; }
Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

GCC Options
-o

Specify output filename Suppress all warnings Compile and assemble, but do not link

-w

-c

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Linking
Compiling multiple code files separately and

linking them later

Compile 1 or more code files using the c switch

Output file is called an Object File

Link Object files using the compiler

More on this concept later!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

GCC Source Code Files


GCC will use the source code file extension to

automatically compile it for that standard

.c or .cc

C C++ Objective C

.cpp, .c++, .cp

.m or .mm

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

GCC Source Code Files


Manually specify the code file languages with

-x <Language>

c c-header cpp-output c++ c++-header c++-cpp-output objective-c objective-c-header objective-c-cpp-output assembler assembler-with-cpp ada java

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Other C Options
--help

Get help documentation Get GCC version

--version

-ffreestanding

Compile the program in a free standing environment

Free Standing Environment: Standard library may not exist and the program launch may not be in the main(). Found most frequently in OS Kernels
Programming in C

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Help!!!!
gcc --help

Usage: gcc [options] file... Options: -pass-exit-codes Exit with highest error code from a phase --help Display this information --target-help Display target specific command line options --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...] Display specific types of command line options (Use '-v --help' to display command line options of sub-processes) --version Display compiler version information -dumpspecs Display all of the built in spec strings -dumpversion Display the version of the compiler -dumpmachine Display the compiler's target processor -print-search-dirs Display the directories in the compiler's search path -print-libgcc-file-name Display the name of the compiler's companion library -print-file-name=<lib> Display the full path to library <lib> -print-prog-name=<prog> Display the full path to compiler component <prog> -print-multi-directory Display the root directory for versions of libgcc -print-multi-lib Display the mapping between command line options and multiple library search directories -print-multi-os-directory Display the relative path to OS libraries -print-sysroot Display the target libraries directory -print-sysroot-headers-suffix Display the sysroot suffix used to find headers -Wa,<options> Pass comma-separated <options> on to the assembler -Wp,<options> Pass comma-separated <options> on to the preprocessor -Wl,<options> Pass comma-separated <options> on to the linker -Xassembler <arg> Pass <arg> on to the assembler -Xpreprocessor <arg> Pass <arg> on to the preprocessor -Xlinker <arg> Pass <arg> on to the linker -combine Pass multiple source files to compiler at once -save-temps Do not delete intermediate files -save-temps=<arg> Do not delete intermediate files -no-canonical-prefixes Do not canonicalize paths when building relative prefixes to other gcc components -pipe Use pipes rather than intermediate files -time Time the execution of each subprocess -specs=<file> Override built-in specs with the contents of <file> -std=<standard> Assume that the input sources are for <standard> --sysroot=<directory> Use <directory> as the root directory for headers and libraries -B <directory> Add <directory> to the compiler's search paths -b <machine> Run gcc for target <machine>, if installed -V <version> Run gcc version number <version>, if installed -v Display the programs invoked by the compiler -### Like -v but options quoted and commands not executed -E Preprocess only; do not compile, assemble or link -S Compile only; do not assemble or link -c Compile and assemble, but do not link -o <file> Place the output into <file> -x <language> Specify the language of the following input files Permissible languages include: c c++ assembler none 'none' means revert to the default behavior of guessing the language based on the file's extension Options starting with -g, -f, -m, -O, -W, or --param are automatically passed on to the various sub-processes invoked by gcc. In order to pass other options on to these processes the -W<letter> options must be used. For bug reporting instructions, please see: <http://gcc.gnu.org/bugs.html>.

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Why Mention this?


You WILL see these options in compilation

procedures and MAKE files Be aware that compilation, in many cases, can be more complex than what we discuss in this video series Be familiar with them and know how and where to get help Always be helpful to those that have questions!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

How to NOT be helpful


Source:

http://www.megasolutions.net/c/What-is-the-purpose-of-the--Wno-deprecate-option-43613.aspx

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

How to NOT be helpful


Source:

http://www.megasolutions.net/c/What-is-the-purpose-of-the--Wno-deprecate-option-43613.aspx

Dont be THAT guy!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

Programming in C

Programming in C
The End
Thanks for watching!

Copyright BlueSignet LLC. All rights reserved. For more visit WiBit.Net

You might also like