Czy kompilator C++ kompiluje czysty C?

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.