Hej, mam dwa pytania dotyczące C++. Ja mam wypracowane na nie swoje odpowiedzi jednak znajomy upiera się przy swoich wersjach. Proszę was o odpowiedzenie mi na następujące pytania:
Który kod jest bardziej poprawny?
int zmienna;
cin>>zmienna;
int tablica[zmienna];
czy
int zmienna;
cin>>zmienna;
int *tablica=new int[zmienna];
//operacja na tablicy
delete []tablica;
Które środowisko jest “lepsze”, pod wszystkimi względami?
Dev-C++ czy Visual C++
Chciałbym aby wypowiedziało się co najmniej kilka osób.
Dynamiczne alokowanie tablicy i zwalnianie jej po wyjściu z zakresu(czy w ogóle później) tak jakby to była tablica statyczna to rozszerzenie GCC, które nie jest częścią standardu. IDE tutaj nie ma nic do gadania.
I tak, druga wersja jest “bardziej poprawna”(bardziej zgodna ze standardem).
Dev-C++ jest mało funkcjonalne, przestarzałe i zabugowane. Orwell Dev-C++ jest już mniej zabugowane i dostarczane z nowym kompilatorem, ale to nadal Dev-C++.
Pierwszy kod jaki podałeś jest poprawny dla dialektu GNU w kompilatorach GCC, wie co zrobić z taką deklaracją, jak ilość komórek tablicy jest zmienną.
Poprzez int tab[x] deklarujesz tablicę na stosie, zostanie usunięta po wyjściu z danego bloku, poprzez new tablica będzie gdzieś tam na stercie, trzeba ręcznie usunąć. Przy tym pierwszym, ten x powinien być stałą, aby skompilowało się w kompilatorach bez tego rozszerzenia (m.in. VC++).
Na początek polecam środowisko Code::Blocks. Darmowe, lekkie, kompilator GCC (MinGW 4.4 bodajże), standardowo nie zamyka okna konsoli po zakończeniu programu (nawet jak wywali błąd), a później sam poeksperymentujesz: dalej C::B, Eclipse, Qt Creator, VS…
Błąd. To zdanie miałoby sens przy porównaniu Eclipse do VS, ale nie przy tym. Dev-C++ to tak stare, niefunkcjonalne i zabugowane IDE, że używanie go jest co najmniej strzałem w stopę.
Zacytowałeś fragment z pytaniem o Dev vs VS, więc ciężko było stwierdzić, że to jest “neutralne”. Szanowaniem czyjejś pracy jest właśnie odradzanie złego oprogramowania, a nie marnowanie czasu innych, by “sami sprawdzili, bo każdy musi do wszystkiego sam dojść”(choć czasami tak naprawdę tylko jedno zdanie jest prawidłowe). Nie zawsze warto odkrywać koła na nowo.
No i nie oszukujmy się, jeśli coś jest marnej jakości, to nie ma co owijać w bawełnę pod przykrywką “szanowania czyjejś pracy”, tylko trzeba o tym mówić. Prosto z mostu.
IMO przewaga deva nad VS jest taka, że w Devie nie trzeba stosować projektu, żeby skompilować 10 linijek kodu, tylko wystarczy sam plik .c/.cpp. Zalety zawsze się znajdą No i Pacman, czy jak mu tam leciało: całkiem pokaźna baza bibliotek do zainstalowania w podobny sposób, jak na Linuksie.
Ja nie twierdzę, że on nie ma zalet, ale przy jego wadach… Manager bibliotek jest przydatny, o ile jest w nim dużo bibliotek i są aktualne. Do VS jest NuGet, co prawda tylko dla .NET, ale mam nadzieję, że niedługo pojawi się jego wersja natywna.