160 likes | 238 Views
Learn how to efficiently compile and manage your C programs using the Make utility. Includes examples, commands, and best practices for organizing source files.
E N D
11. előadás (2004. április 27.) • Make utility • math.h • string.h • time.h 1
Make I. Forrásállományok együttes fordítására alkalmazott eszköz. A megadott fordítót használja. (gcc, g++...) Makefile. Források, header állományok, konstansok, változók, parancsok. Kiadott parancs: make 2
Make II. Használni érdemes, ha több file-unk van. A megadott függőségektől, feltételektől függően hajtódnak végre az utasítások. A változó neveknek illik utalni céljára. Mint konstans funkcionál, de feltételeken kívül megváltoztatható. Változó létrehozása: COMPILER = gcc Változó használata: $(COMPILER) 3
Make III. Feltétel megadása: sajat.o: sajat.c v. sajat.o: sajat.c sajat.h gcc –c sajat.c v. $(COMPILER) –c $(SRC) Parancsokat tabulátorral kell kezdeni. 4
Make IV. Az utasítás elé @ írva nem jelenik meg a szabványos kimeneten. @rm *.o Cimke megadás: Clean: @rm $(OBJ) 5
Make V. PROGRAM_NEVE = nev RM = /bin/rm OBJ = sajat.o main.o SRC = sajat.c main.c COMPILER = gcc $(PROGRAM_NEVE): $(OBJ) $(COMPILER) -o $(PROGRAM_NEVE) $(OBJ) echo $? $@ $(OBJ): sajat.h $(SRC) $(COMPILER) -c $(SRC) clean: @$(RM) $(OBJ)
math.h – matematikai függvények Matematikai eljárások függvényei és makrói vannak itt deklarálva. Trigonometrikus függvények: sin(double) cos(double) tan(double) asin(double) acos(double) ... Argumentumot radiánban kell megadni. 7
Matematikai függvények 2. Egyéb mat. függvények: exp(double) – ex log(double) – ln(x) sqrt(double) - négyzetgyök floor(double)- x-nél nem nagyobb, legnagyobb egész szám fabs(double) - |x| abszolútérték 8
Matematikai függvények 3. #include <stdio.h> #include <math.h> int main() { double a = 3.1415; double b = -1.0; printf("szinusz(360): %lf\n",sin(a)); printf("kószinusz(360): %lf\n",cos(a)); printf("absz értéke a -1: %lf\n",fabs(b)); printf("nem nagyobb egész szám: %lf\n",floor(a)); }
String.h I. Karaktersorozatokat kezelő függvények vannak itt deklarálva. char *strcpy(char*, const char*) A második karaktersorozatot másolja az elsőbe. Visszatér vele. char *strcat(char*, const char*) A második karaktersorozatot az elsőhöz fűzi. Visszatér mutatójával. 10
String.h II. Karaktersorozatokat kezelő függvények vannak itt deklarálva. char *strcmp(const char*, const char*) Összehasonlítja a két karaktersorozatot. Visszatér negatív, 0, pozitív (ha első nagyobb, mint második) size_t char *strlen(const char*) Visszatér a karaktersorozat hosszával. 11
String.h III. #include <stdio.h> #include <string.h> int main() { char *t1; char *t2 = "alma"; t1 = (char*)malloc(strlen(t2)+1,sizeof(char)); printf("vissza: %s\n", strcpy(t1,t2)); printf("t1: %s\n", t1); printf("uaz: %d\n", strcmp(t1,t2)); return 0; }
Time.h Dátummal és idővel kapcsolatos műveletekhez szükséges adattípusok és függvények vannak itt deklarálva. struct tm; tm_sec percet követő másodpercek tm_min órát követő percek Stb... 13
time.h II. clock_t clock(void) Visszatérési érték a program kezdete óta eltelt processzor-idő. time_t time(time_t *tp) Visszatérési érték az aktuális naptári idő. double difftime(time_t t2, time_t t1) Visszatérési érték a t2 – t1 másodpercben. char *asctime(const struct tm *tp) A tp-ben tárolt időt karakterláncá alakítja adott formátumban. Size_t strftime(char *s, size_t max, const char *format,const struct tm *tm) Az fmt formátumleírás alapján s-be másolja a tm időt, mint egy karaktersorozatot. 14
time.h III. #include <stdio.h> #include <time.h> int main() { struct tm *tm; time_t ts; char *t; t = (char*)malloc(21,sizeof(char));
time.h IV. ts = time(NULL); tm = localtime(&ts); printf("Ido: %d:%d:%d\n", tm->tm_hour,tm->tm_min,tm->tm_sec); printf("Ido: %s\n",asctime(tm)); strftime(t,20,"%B %d. %H:%M:%S",tm); printf("Ido: %s\n",t); return 0; }