Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Podobne dokumenty
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Co nie powinno być umieszczane w plikach nagłówkowych:

zastępować zarezerwowane słowa lub symbole innymi,

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

#line #endif #ifndef #pragma

Języki programowania obiektowego Nieobiektowe elementy języka C++

Podstawy programowania skrót z wykładów:

Lab 1. Wstęp do programowania w C. Zintegrowane środowisko programistyczne Visual Studio.

Preprocesor. natychmiast następuje \n są usuwane następny wiersz zostaje połączony z tym, w którym był znak \ o usuwane są wszystkie komentarze są

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Podstawy programowania C. dr. Krystyna Łapin

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Język C - podstawowe informacje

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Część 4 życie programu

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

Poprzedni wykład [ ] :

Wstęp do Programowania, laboratorium 02

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Argumenty wywołania programu, operacje na plikach

5 Przygotował: mgr inż. Maciej Lasota

I - Microsoft Visual Studio C++

Podział programu na moduły

Języki i paradygmaty programowania 1 studia niestacjonarne 2018/19

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

1 Podstawy c++ w pigułce.

Mikrokontroler ATmega32. Język symboliczny

Programowanie strukturalne i obiektowe

Programowanie Proceduralne

Zmienne, stałe i operatory

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 3 - sem.iii. Dr inż. M. Czyżak

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

1 Podstawy c++ w pigułce.

wykład I uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Wstęp do języka C wykład I dr Jarosław Mederski Spis Ogólne informacje

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Podstawy programowania - 1

Pytania z języka C/C++ main dyrektywy preprocesora #include 15. #define 16. #define słowa zastrzeżone \n, \t, \f 26.

Podstawy programowania w języku C i C++

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Wstęp do programowania

Programowanie Proceduralne

Wstęp. do języka C na procesor (kompilator RC51)

Stałe i zmienne znakowe. Stała znakowa: znak

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do wskaźników w języku ANSI C

Abstrakcyjne struktury danych w praktyce

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Pobieranie argumentów wiersza polecenia

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. II - wykład 6. Dr hab. inż. M. Czyżak

Sieciowa komunikacja procesów - XDR i RPC

PMiK Programowanie Mikrokontrolera 8051

Tablice (jedno i wielowymiarowe), łańcuchy znaków

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Podstawy programowania (1)

Języki i metodyka programowania. Wprowadzenie do języka C

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

KURS C/C++ WYKŁAD 1. Pierwszy program

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Programowanie w językach wysokiego poziomu

Tablice, funkcje - wprowadzenie

Inżynieria Wytwarzania Systemów Wbudowanych

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Preprocesor języka C: dyrektywy, makrodefinicje

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. III. Dr inż. M. Czyżak

Wskaźniki. Informatyka

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Zofia Kruczkiewicz, ETE8305_2 1

Wstęp do programowania

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

dr inż. Jarosław Forenc

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

PARADYGMATY PROGRAMOWANIA Wykład 4

Język C zajęcia nr 11. Funkcje

Czy procesor musi się grzać?

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Wstęp do programowania

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Programowanie I C / C++ laboratorium 01 Organizacja zajęć

Transkrypt:

Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak

Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi. Można sterować zachowaniem preprocesora stosując odpowiednie polecenia zwane dyrektywami preprocesora.

Język C - preprocesor #include - dyrektywa włączająca tekst innego pliku źródłowego w miejscu jej wystąpienia w pliku podlegającym aktualnie przetwarzaniu #if - dyrektywa kompilacji warunkowej #elif - działa podobnie jak else if w języku C #endif - oznacza koniec bloku kompilacji warunkowej #define - definiuje stałe i makroinstrukcje (pseudofunkcje) #undef - usuwa definicje stałej lub makra #ifdef - znaczy to samo co #if defined( ) #ifndef - znaczy to samo co #if!defined( ) #error - generuje błąd wraz z opisem

Język C - preprocesor Dyrektywy kompilacji warunkowej #if, #else, #elif i #endif #if wyrażenie1 sekwencja instrukcji 1 #elif wyrażenie2 sekwencja instrukcji 2 #elif wyrażenie3 sekwencja instrukcji 3... #elif wyrażenien #endif sekwencja instrukcji N W standardzie ANSI C dyrektywy #if i #elif można zagnieżdżać do co najmniej 8 poziomów, a w C99 do co najmniej 63.

Język C - preprocesor Przykład. Użycie dyrektyw #if, #else, #elif i #endif #define POLSKA 0 #define FRANCJA 1 #define USA 3 #define AKTYWNY_KRAJ USA #if AKTYWNY_KRAJ==USA char waluta[ ]="dolar"; #elif AKTYWNY_KRAJ==FRANCJA char waluta[ ]="euro"; #else AKTYWNY_KRAJ==POLSKA char waluta[ ]="zloty"; #endif

Język C - preprocesor Dyrektywy kompilacji warunkowej #define i #undef Dyrektywy #define i #undef Dyrektywa #define definiuje makro, a dyrektywa usuwa poprzednio zdefiniowaną nazwę makra. Dyrektywy #define ma postać #define makro, a dyrektywa #undef ma postać #undef makro. #define N 5 #define M 5 double tab[n][m] #undef N #undef M // Od tego miejsca N i M nie są zdefiniowane

Język C - preprocesor Dyrektywy #ifdef i #ifndef (cz.1) Dyrektywy te oznaczają odpowiednio " jeśli zdefiniowano" i " jeśli nie zdefiniowano". Ogólna postać dyrektywy #ifdef to #ifdef nazwa_makra sekwencja instrukcji #endif Jeśli nazwa_makra została wcześniej zdefiniowana, wówczas kompilowany jest kod określony jako sekwencja instrukcji.

Język C - preprocesor Dyrektywy #ifdef i #ifndef (cz.2) Ogólna postać dyrektywy #ifndef (oznacza - jeśli nie zdefiniowano) ma formę nastepujacą: #ifndef nazwa_makra sekwencja instrukcji #endif Jeśli nazwa_makra została nie została wcześniej zdefiniowana przy użyciu dyrektywy #define, wówczas kompilowany jest kod określony jako sekwencja instrukcji.

Język C - preprocesor Dyrektywy #ifdef i #ifndef (cz.3) #include <stdio.h> #define STUDENT 1 int main() { #ifdef STUDENT printf(" Witaj\n"); #else printf("witajcie"); #endif #ifndef STUDENT printf("\n STUDENT nie zostal zdefiniowany"); return 0;}

Język C - preprocesor Operator defined Operator ten umożliwia sprawdzenie czy istnieje definicja danej nazwy makra. Ogólna postać stosowania tego operatora to: defined nazwa_makra Jeśli nazwa_makra została zdefiniowana, wyrażenie to ma wartość logiczną prawda, jeżeli nie to ma wartość fałsz. Operator ten można użyć następująco: #if defined FINAL printf("wersja finalna\n"); Do operatora defined można też stosować operator negacji!, wtedy wyrażenie z operatorem defined ma postać!defined.

Język C - preprocesor Dyrektywa #line (cz.1) Dyrektywa #line zmienia zawartość stałych LINE oraz FILE będących predefiniowanymi identyfikatorami kompilatora. Stała LINE zawiera numer aktualnie kompilowanego wiersza kodu. Stała FILE zawiera nazwę aktualnie kompilowanego pliku źródłowego. Dyrektywa jest stosowana w następującej postaci #line numer "nazwa pliku", gdzie numer to dowolna dodatnia liczba całkowita, a nazwa pliku to dowolna poprawna nazwa pliku. numer staje się nową wartością LINE a nazwa pliku staje się nową wartością FILE.

Język C preprocesor Przykład. Zastosowanie #line, LINE i FILE.(cz.1) #include <stdio.h> #include <conio.h> int main(int argc, char* argv[]) { printf("linia programu:%d\n", LINE ); printf("nazwa pliku :%s\n", FILE ); #line 30 "Plik1" printf("linia programu:%d\n", LINE ); printf("nazwa pliku :%s\n", FILE ); getch(); return 0; }

Język C preprocesor Przykład. Zastosowanie #line, LINE i FILE.(cz.2) Wynik działania programu Linia programu:5 Nazwa pliku :C:\Documents and Settings\Administrator\My Documents\Unit1_01122010.cpp Linia programu:30 Nazwa pliku :Plik1

Język C preprocesor Dyrektywa #pragma Dyrektywa o postaci #pragma nazwa_dyrektywy pozwala przekazywać kompilatorowi różnego rodzaju polecenia. W języku C99 dodano operator _Pragma umożliwiający umieszczenie pragmy w inny sposób _Pragma("dyrektywa") Przy użyciu pragmy można wprowadzić polecenia dla konkretnego kompilatora, jeżeli dany kompilator nie pragmy umieszczonej w tekście programu to ją pomija.

Język C preprocesor Przykład. Wybrane dyrektywy #pragma dla kompilatora Borland Builder C++.( cz.1). #pragma argsused Pragma ta jest dozwolona tylko między definicjami funkcji i wpływa na następną definicję funkcji. Wyłącza ona komunikat: "Parameter name is never used in function func-name" #pragma hdrstop Dyrektywa ta kończy listę plików nagłówkowych, które mogą być prekompilowane. Pozwala to zredukować miejsce na dysku używane przez prekompilowane nagłówki.

Język C preprocesor Przykład. Wybrane dyrektywy #pragma dla kompilatora Borland Builder C++. ( cz.2). #pragma startup function-name <priority> #pragma exit function-name <priority> Pragma startup określa funkcję, która jest wywoływana jako pierwsza przed main(), a pragma exit, funkcję która jest wywoływana przed zakończeniem programu przez funkcję _exit(). <priority> może być liczbą z przedziału <64,256>. Funkcje o wyższym priorytecie są wywoływane jako pierwsze przy starcie i jako ostatnie przy wyjściu. Funkcja ta musi być wcześniej zdefiniowana i mieć nagłówek o postaci void fun (void);

Funkcja main() Język C preprocesor Przykład. Proste zastosowanie #pragma startup #include <stdio.h> #include <conio.h> void fun(void) { printf("wywolanie funkcji fun\n"); } #pragma startup fun 100 int main(int argc, char* argv[]) { printf(" Funkcja main()"); getch(); return 0; } Wynik działania programu Wywolanie funkcji fun

Język C preprocesor Operatory preprocesora Operator # Operator ten nazywany jest operatorem tworzenia łańcuchów. Przekształca on poprzedzany argument na tablicę znakową. Przykład. Przekształcenie programu przy użyciu operatora #. #include <stdio.h> #define UtworzLan(s) #s int main(){ printf(utworzlan(lubie C)); return 0; } Program realizowany #include <stdio.h> #define UtworzLan(s) #s int main(){ printf("lubie C"); return 0; }

Język C preprocesor Operatory preprocesora Operator ## Operator ten to operator sklejania łańcuchów. Przykład. Przekształcenie programu przy użyciu operatora ##. #include <stdio.h> #define PolaczLan(a,b) a##b int main(){ int xy=10; printf("%d",polaczlan(x,y)); return 0; } #include <stdio.h> #define PolaczLan(s) a##b int main(){ int xy=10; printf("%d",xy); return 0; }

Język C preprocesor Komentarze W języku ANSI C występuje jeden rodzaj komentarza. Jest to komentarz wielowierszowy rozpoczynający się parą znaków /* i kończący parą */. Kompilator pomija cały tekst znajdujący się między tymi parami znaków. Komentarze takie nie mogą być zagnieżdżane( nie można umieszczać jednego komentarza wewnątrz drugiego). Komentarze takie mogą być umieszczane w programie prawie w każdym miejscu, z wyjątkiem wnętrza słowa kluczowego i identyfikatora. Przykład. /* to jest komentarz poprawny */ swi /* komentarz niepoprawny */tch (ch) { case 1:printf("war1"); break; case 2:printf("war2"); }

Język C preprocesor Komentarze W standardzie C99 istnieje dodatkowo komentarz jednowierszowy w stylu C++ rozpoczynający się parą znaków // i rozciągający się do końca wiersza. Komentarz taki może być umieszczany wewnątrz komentarza wielowierszowego. Przykład. a) // komentarz jednowierszowy b) /* // komentarz zagnieżdżony jednowierszowy... */

Język C Predefiniowane makra W języku ANSI C istnieje pięć predefiniowanych nazw makr: LINE, FILE, DATE, TIME, STDC. Makra LINE i FILE zostały przedstawione poniżej. Makro DATE zawiera łańcuch w postaci miesiąc/dzień/rok reprezentujący datę translacji pliku źródłowego na plik obiektowy. Makro TIME zawiera godzinę kompilacji programu w postaci godzina:minuta:sekunda. Makro STDC zawiera informację o zgodności kompilatora ze standardem C, jeśli jest równe 1, to kompilator jest zgodny ze standardem.