[AVR-GCC] Wstawki w C++

Feb 03, 2007 8 Replies

Witam, mam program w C, w osobnym pliku mam 2 funkcje w C++. Wszystko sie fajnie kompiluje osobno. Jednak jak chce dolonczyc plik naglowkowy tych funkcji w c++ do mojego programu w C to wywala bledy... Jak to obejsc ???



Osobiscie widzialem w sieci rozwiazania dolanczania wstawek w C do programow napisanych w C++, ale na odwrot nic ... pomozecie???



Pozdr Pawel K


Pawel K napisał(a):

Dobrze by było, gdybyś pokazał jakie konkretnie błędy wyrzuca kompilator. Jeszcze lepiej, gdybyś wkleił też fragmenty pliku nagłówkowego, które sprawiają problemy i komendy, którymi kompilujesz i linkujesz oba pliki.

w.

Spinacz biurowy, Pawel K snipped-for-privacy@kpw.qs.pl>!

Jak znam życie, to zapomniałeś o wstawieniu kodu w C++ w bloku extern "C" { }

Wojtek Kaniewski napisał(a):

taki blad: In file included from uC.c:23: include/test.h:6: error: expected ';', ',' or ')' before '&' token include/test.h:7: error: expected ';', ',' or ')' before '&' token

plik naglowkowy wstawki w C++:

#ifndef TEST_H_ #define TEST_H_

#include <stdint.h>

inline void _ON ( uint16_t &Socket, uint8_t Nr); inline void _OFF ( uint16_t &Socket, uint8_t Nr);

#endif /*TEST_H_*/

"wstawieniu kodu"? Z tego co wiem to "extern C" dodaje siê tylko przy deklaracjach funkcji a nie definicjach i kodzie. Czyli w plikach nag³ówkowych. Moim zdaniem chodzi o to ¿eby np: maj±c bibliotekê skompilowan± i napisan± w c++ mo¿na by³o wykorzystaæ w c, poniewa¿ c++ zmienia nazwy funkcji w zwi±zku z mo¿liwo¶ci± ich prze³adowania i 'c' ich nie widzi. Ale mogê siê myliæ.

Pozdrawiam Pawe³

Pawel K napisał(a):

Coś mi mówi, że C nie najlepiej radzi sobie z referencjami. Spróbuj przekazywać parametr Socket przez wskaźnik.

w.

Odwrotnie się nie da, niestety. (Bo jaki ma sens pisanie zwięzłego kodu w C++, a potem przechodzenie przez assembler i maglowanie nazw?).

formatting link
[...] [32.1] What do I need to know when mixing C and C++ code?

Here are some high points (though some compiler-vendors might not require all these; check with your compiler-vendor's documentation):

  • You must use your C++ compiler when compiling main() (e.g., for static initialization) * Your C++ compiler should direct the linking process (e.g., so it can get its special libraries)
[...]

Pawel K napisał(a):

[...]

Używasz referencji, których kompilator C nie rozumie. I nie może, bo referencje pojawiły się dopiero w C++. Nie używaj referencji w funkcjach, które mają być wywoływane z poziomu C ani w plikach nagłówkowych dołączanych przez kod w C.

Wojtek Kaniewski napisał(a):

tez mi sie tak wydawalo, ale przez referencje ladnie wyglodal by program :)

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required