Porkoláb Zoltán - C programozás 2017.10.02. előadás jegyzet
3. előadás: Preprocesszor és használata.
#include
int main() /* hello program */ //comment
{
printf("Hello!\n", );
return 0;
}
//---------------//
Preprocesszor direktívák:
#include
--> "file"
--> "./dir/file" //relative PATH
--> "/home/dir/file" //absolute PATH
gcc -I /home/gsd/include
/////////////
macro: //csupa nagybetű
#define BUFSIZE 1024
//mindenhol lecseréli, kivéve stringben
#define MAX(x,y) x>y ? x:y //ha x>y, akkor x, különben y
baj lehet:
2*MAX(a,5)
--> 2*a>5 ? a:5 //a 2a-t hasonlítaná össze az 5-tel
erre megoldás:
((x)>(y)?(x):(y))
baj (??):
2*MAX(++a,5)
--> 2*((++a)>(5)?(++a):(5))
MINIMALIZÁLJUK a macrók használatát!
(DE néha hasznos)
/////////////
include őrszemek (header guards): #if, #ifdef, #ifndef
--> csak egyszer kell egy fájl
#ifndef FILE_H
#define FILE_H //header file
//...
#endif /* FILE_H */
--> feltételes fordítás
először FILE_H -> false, nem definiált, lefordítja
ezután ifndef hamis lesz
/////////////
PATH:
- linux: ../../...
- win: ..\..\...
--> van h vmit csak linuxon akarok futtatni:
#ifdef __LINUX__ && GCC > 4.2
/* linux specifikus kód */
#else
#error "Not implemented."
#endif
///////
__FILE__
__LINE__
--> macrók, melyik fájlban hányadik sornál vagyunk (hibaüzenetek!!)
///////
nagy programrészlet:
#ifdef VER_17
#ifdef VER_18
////////////////////
tokenek:
- azonosítók (amiket mi találunk ki): main, printf, Int, iNt, iF akár :D
stílus: ez_egy_valtozo/ ezEgyValtozo -> camel case (Hungarian notation: Charles Simonyi)
- kulcsszavak: int, double, char, f, while, for, return
- literálok: 0xc, 12, 3.14l, 0.5f, "a", "\'", "\t", "\0", "Hello\n", "\377", "\xff" (egyes karakterek)
(régen 014 oktális konstans, 0XC hexa)
- operátorok: ()...
- szeparátorok: {}, ;
Fordítás: #, komment -> már akkor
UNIX chmod:
rw- r-- r--
110 100 100 - bin
6 4 4 - oct
Miért örül a programozó Halloweenkor karácsonynak? oct.30. - dec.25.
:P
.5f 3.14l -> valós számok ábrázolása
m*2^k - mantissza, karakterisztika
float/double: a mantisszában van különbség (más pontosság)
short < int < long < long long
float < double < long
C-ben az int nem határozza meg, hogy hány bit legyen (<-> Java), hardware-től függ
char: "a", "\"" -> escape char: össz. egy byte
string: "Hello\n" -> végén lezáró "\0"
////////////////
#include
#define LOWER -100
#define UPPER 400
#define STEP 10
#define F2C(x) ((5./9.)*((x)-32))
int main()
{
int fahr;
for (fahr=LOWER; fahr
double fahr2cels(double);
int main(){
const int lower = -100;
const int upper = 400;
const int step = 10;
for (int fahr=lower; fahr <= upper; fahr += step){
printf("fahr=%d,\tcels=%f\n", fahr, fahr2cels(fahr)); //a fv. működik, mert az intet double-lé konvertálja
}
return 0;
}
double fahr2cels(double f){
return 5./9.*(f-32);
}
//lehetőleg deklaráljuk a függvény a paraméter típusával együtt!!
f(void) //ez is jó, nincs meghatározva a típus