Witam. Pytanie jak w temacie. Czy nie bedzie zandych problemow gdy bede uzywal kompilatora C++ do pisania i kompilowania programow w C?
powinno być ok, oczywiście wszystko zależy od kompilatora, ale ja się jeszcze nie spotkałem z takim, który by miał z tym problemy. Najlepiej sprawdzić.
Otocz kod za pomocą extern “C”. Btw. o jaki kompilator Ci chodzi, wiedząc to można powiedzieć więcej.
Teoretycznie nie da się skompilować źródła napisanego w C w kompilatorze C++. Przynajmniej z powodu plików nagłówkowych:
W C piszemy:
#include
W C++ piszemy:
#include
Z tym że większość kompilatorów albo akceptuje oba warianty (co właściwie niezgodne ze standardem) albo rozpoznaje że jednak to źródło napisane w języku C (wnioskuje przeważnie z rozszerzenia) i kompiluje jako źródło C.
CodeGear RAD Studio 2009
Nowy kompilator powinien,tylko jakieś starsze mogą mieć z tym problemy,kompilator C++ kompiluje czysty C,bo C++ to rozszerzenie zwykłego C,problemy mogą być ze starszymi kompilatorami i kompilatorami obsługiwanymi z linii poleceń
np. w Linuxie są kompilatory gcc kompilujący czysty C i g++ kompilujący c++,większość akceptuje oba standardy.
to jak powinien być skompilowany plik jest rozpoznawane po rozszerzeniu .c dla C i .cpp dla C++
Często kompilator myli się ze środowiskiem IDE zawierającymi kompilator,linkier,debugger,edytor,narzędzia do wizualnego projektowania interfejsu,to są pakiety ze “Studio” w nazwie.
Ok, dzieki za odp.
Pomijając nazwy plików nagłówkowych (to akurat najmniejszy problem) między C i C++ są sprzeczności, C++ w ogólności nie jest rozszerzeniem C (mimo, że działa w większości prostych przypadków). Przykład:
#include
int silnia(a)
int a; /* kto to wymyślił?! */
{
if (a <= 1)
return 1;
else
return silnia(a - 1) * a;
}
int main()
{
int a = 5, *ptr;
void *v;
printf("%d\n", silnia(a));
/* kolejny przyklad: rzutowanie (a raczej jego brak) */
v = &a;
ptr = v;
printf("%d\n", *ptr);
return 0;
}
Powyższy kod, kompilator gcc z flagami -Wall -pedantic -ansi -x c kompiluje bez ostrzeżeń, ale -x c++ już nie przełknie.