• Keine Ergebnisse gefunden

1 Grundlagen derProgrammierung in C

N/A
N/A
Protected

Academic year: 2021

Aktie "1 Grundlagen derProgrammierung in C"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1 Grundlagen der

Programmierung in C

Hello World

Wintersemester 2005/2006 G. Zachmann

Clausthal University, Germany

zach@in.tu-clausthal.de

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 2

ASCII Editor C++ source

ClassName.cpp

ClassName.h Linker

Link further classes

Executable ProgName.exe

Processor

execute, test, debug Libraries

Object codeObject codeObject codeObject code

Platform-dependent ! Object code

ClassName.o Compiler

Analyze, check consistency, generate code Sie

Wie entsteht ein Programm

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 3

Programmieren geschieht in einem Zyklus

Compile Link

Library routines

Other object files Think

Edit

Load Execute Source Program

Edit-Compile-Debug-Zyklus

Wie entsteht ein Programm

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 4

tahiti: zach% g++

-ffor-scope –Wall –W -Wold-style-cast -Woverloaded-virtual -Wfloat-equal -Wshadow myprogram.cpp –o myprogram

 Alias definieren:

alias gpp 'g++ … -Wshadow'

 Verwendung:

gpp myprogram.cpp –o myprogram

 Komfortableres Alias:

alias gpp 'g++ … -Wshadow \!#:1 –o \!#:1:r' gpp myprogram.cpp

1 Zeile!

Compilieren mit g++ (von Hand)

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 6

// Program: Display greetings // Author(s): Ima Programmer // Date: 1/24/2001

#include <stdlib.h>

#include <stdio.h>

int main( int argc, char *argv[] ) {

puts("Hello world!");

return 0;

} Preprocessor

directives

Ends execution of main(), which ends program

Kommentar

Funktions- aufruf Programm

startet hier;

eine Fkt main() muß immer vor- handen sein.

Macht bestimmte

"System calls"

bekannt

Error code for calling process;

0 = everyting ok

Hello World

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 7

// Program: Display greetings // Author(s): Ima Programmer // Date: 1/24/2001

#include <stdlib.h>

#include <stdio.h>

int main( int argc, char *argv[] ) {

puts("Hello world!");

return 0;

} Kommen- tare!

Leerzeilen zwischen sinnvollen Abschnitten

Leerzeichen innerhalb einer Zeile!

Vertikale Ausrichtung!

Einrückung = 4(!) Spaces!

Style Guide

(2)

2

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 8

Benötigt zwar weniger Bytes auf der Platte, aber …

Kann keiner mehr lesen, besonders dann, wenn der File groß wird (oft 100-10000 Zeilen pro File)

Nicht mehr wartbar!

(wer hat schon Lust, solchen Code von jemand anders zu lesen?)

Für mehr schlechte Beispiele siehe The International Obfuscated C Code Contest (http://www.de.ioccc.org/ )

#include <stdlib.h>

#include <stdio.h>

int main(int argc,char*argv[]){

puts("Hello world!");

return 0;

}

Schlechtes Beispiel

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 9

Ein paar "schöne" Beispiele

Wurzel, Raymond Cheong, 2001

#include <stdio.h>

int l;int main(int o,char **O, int I){char c,*D=O[1];if(o>0){

for(l=0;D[l ];D[l ++]-=10){D [l++]-=120;D[l]-=

110;while (!main(0,O,l))D[l]

+= 20; putchar((D[l]+1032) /20 ) ;}putchar(10);}else{

c=o+ (D[I]+82)%10-(I>l/2)*

(D[I-l+I]+72)/10-9;D[I]+=I<0?0 :!(o=main(c/10,O,I-1))*((c+999 )%10-(D[I]+92)%10);}return o;}

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 10

Racing Game, Daniel Vik, 2004

Missile Command, John Williams, 2001

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Hello World, 11

Compiler-Fehlermeldungen

#include <stdlib.h>

#include <stdio.h>

int main( int argc, char *argv[] ) {

puts("Hello world!");

return 0;

}

Hello.cpp: In function 'int main(int, char**)' : Hello.cpp:8: error: parse error before '}' token

1 2 3 4 5 6 7 8 9

Hello.cpp: In function 'int main(int, char**)' : Hello.cpp:7: error: parse error at end of input Hello.cpp: In function 'int main(int, char**)' : Hello.cpp:6: error: 'puts' undeclared (first use this function)

Hello.cpp:6: error: (each undeclared indentifier is reported only once for each function it appears in.)

fehlt fehlt

fehlt

Hello.cpp:1:18: stdlib: No such file or directory fehlt

Hello.cpp:4: error: 'argc' was not declared in this scope

Hello.cpp:4: error: 'argv' was not declared in this scope

Hello.cpp:4: error: parse error before ']' token fehlen

Hello.cpp:8:2: warning: no newline at end of file

fehlt

Hello.cpp:1:2: invalid preprocessing directive #iclude

falsch

Referenzen

ÄHNLICHE DOKUMENTE

Zachmann Grundlagen der Programmierung in C - WS 05/06 Zusammengesetzte Typen, 3. Das

Parameter vertikal ausrichten, falls nicht auf eine Zeile passend Rückgabetyp auf eigene Zeile,. falls dieser

ein Speicherblock ist zu genau einem Objekt (z.B. ein Double) zugeordnet, dieser Block hat genau einen Typ, und es gibt keine Möglichkeit im Programm, diesen Speicherblock als

ein Speicherblock ist zu genau einem Objekt (z.B. ein Double) zugeordnet, dieser Block hat genau einen Typ, und es gibt keine Möglichkeit im Programm, diesen Speicherblock als

 Sprache (Interpreter / Virtual Machine) erkennt, wenn Objekt vom Programm nicht mehr zugreifbar ist (kein Zeiger führt mehr darauf).  Garbage-Collector läuft im Hintergrund

 Gebe auch keinen Pointer auf eine lokale static Variable zurück (auch nicht als Out-Parameter).  Return-by-Value macht heute keine Kopie mehr (war früher

The proliferation of modern programming languages (all of which seem to have stolen countless features from one another) sometimes makes it difficult to remember what language

Then insert the newly created CP/M operations diskette in disk drive A, and insert the NEVADA SOFTWARE distribution diskette in drive Band type (ctl-c) to