180
ROZDZIAŁ 25. ŁĄCZENIE Z INNYMI JĘZYKAMI
int main O
asm ("nop");
W tym wypadku wstawiona zostanie inst rukcja “nop’' (no operat ion), która tak naprawdę służy tylko i wyłącznie do konstruowania pętli opóźniających.
Język C++ z racji swojego podobieństwa do C będzie wyjątkowo łatwy do łączenia. Piwnym utrudnieniem może bvć obiektowość języka C-M- oraz występowanie w nim przestrzeni nazw oraz możliwość przeciążania funkcji. Oczywiście nadal zakładamy, że główny program piszemy w C, natomiast korzystamy tylko z pojedynczych funkcji, napisanych w C-M. Ponieważ język C nie oferuje tego wszyst kiego, co daje programiście język C++, to musimy “zmusić’* C-M- do wyłączenia pewnych swoich możliwości, aby można było połączyć ze sobą elementy programu, napisane w dwóch różnych językach. Używa się do tego następującej konstrukcji:
extern "C" {
/• funkcje, zmienne i wszystko to, co będziemy łączyć z programem u C •/
W zrozumieniu teorii pomoże Ci prosty przykład: plik fl.c:
•include <stdio.h> extem int f2(int a);
int main O
printf C7.d\n", f2(2)); return 0;
oraz plik f2.q>p:
•include <iostream> using namespace std; oxtem "C" { int f2 (int a)
cout « "a»" « a « endl; return a*2;
Teraz oba pliki kompilujemy:
gcc fl.c -c -o fl.o g*+ f2.cpp -c -o f2.o
Przy łączeniu obu tych plików musimy jiamiętać. że język C-f-f także korzysta ze swojej biblioteki. Zatem poprawna postać polecenia kompilacji powinna wyglądać:
gcc fl.o f2.o -o program -lstdc+*
(stdc-M- biblioteka standarilowa języka C++). Bardzo istotne jest tutaj to, abyśmy zawsze
pamiętali o extern “C, gdyż w przeciwnym razie funkcje napisane w C-M będą dla programu w C całkowicie niewidoczne.