ZetaTwo / dd2387-laborationer

KTH - DD2387 - Laborationer
1 stars 0 forks source link

Lab1 1.1: Intro to C++ #3

Closed emlun closed 10 years ago

emlun commented 10 years ago

1.1 (iteration, pekare, make)

Det finns ett klassiskt program som brukar kallas för Hello world. Denna uppgift går ut på att skriva ett program, här kallat hello, som skriver ut olika varianter på texten Hello world!. Programmet ska kunna ta en text och/eller ett tal som argument. Exempelkörning:

datan> ./hello
Hello world!
datan> ./hello C++
Hello C++!
datan> ./hello 3 C++ lurigt !
Hello C++ C++ C++!
datan> ./hello 2
Hello world world!
datan>

Denna uppgift är alltså inte en övning i objektorienterad programmering utan en introduktion till C/C++.

Tips: Använd argv och argc. Använd atoi för att översätta en char * till ett tal (om strängen inte representerar ett tal får man noll). Vi kommer använda den kompilator g++ som finns intallerad på salsdatorerna. För att kompilera din källkodsfil nedan kallad myfile.cpp skriv:

> g++ -o myprog.out myfile.cpp

Filen myprog.out kan du köra i terminal fönstret genom att skriva:

> ./myprog.out

Om man inte anger -o döps den kompilerade filen till a.out på uni-system. Ofta används programmet make för att kompilera större projekt, make utgår från att det finns en fil makefile med regler för vad som ska göras. Kopiera makefile från kurskatalogen till den katalog du står på (.) och titta på filen.

> cp /info/DD2387/kurskatalog/lab1/makefile .
> more makefile
%.out: %.cpp
g++ -g -std=c++0x -Wall $*.cpp -o $*.out

Nu kan du skriva

> make myfile.out

Det är nyttigt att lära sig hur make fungerar (även de som använder Visual Studio) googla efter valfri kort tutorial och svara på vad andra raden gör, vad betyder $*? Googla även på g++ och ta reda på vad -Wall och -g gör.

emlun commented 10 years ago
  1. *googla efter valfri kort tutorial och svara på vad andra raden gör, vad betyder `$`?**
    • $* är stammen på den regel som används (t.ex. regeln %.o: har stammen "foo" om man kör "make foo.o"). GNU make manual
  2. Googla även på g++ och ta reda på vad -Wall och -g gör.
    • -Wall: skriv ut (nästan) alla varningar
    • -g: generera debug-information (framför allt för GDB)
emlun commented 10 years ago

man g++:

   -Wall
       This enables all the warnings about constructions that some users consider questionable, and that are easy to
       avoid (or modify to prevent the warning), even in conjunction with macros.  This also enables some language-
       specific warnings described in C++ Dialect Options and Objective-C and Objective-C++ Dialect Options.

       -Wall turns on the following warning flags:

       -Waddress -Warray-bounds (only with -O2) -Wc++11-compat -Wchar-subscripts -Wenum-compare (in C/ObjC; this is on
       by default in C++) -Wimplicit-int (C and Objective-C only) -Wimplicit-function-declaration (C and Objective-C
       only) -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmaybe-uninitialized
       -Wmissing-braces (only for C/ObjC) -Wnonnull -Wopenmp-simd -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
       -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs
       -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable
       -Wvolatile-register-var

       Note that some warning flags are not implied by -Wall.  Some of them warn about constructions that users
       generally do not consider questionable, but which occasionally you might wish to check for; others warn about
       constructions that are necessary or hard to avoid in some cases, and there is no simple way to modify the code
       to suppress the warning. Some of them are enabled by -Wextra but many of them must be enabled individually.