Funkcja main zwraca int, więc pominięcie instrukcji return jest trochę partaczeniem kodu ]system("PAUSE");[/b] to na Linuksie to raczej nie zadziała, bo w przeciwieństwie do Windowsów w systemie nie ma standardowo programu pause, który wyświetla prośbę o naciśnięcie dowolnego klawisza. Generalnie system("pause"); nie powinno się używać - polecam link http://www.gidnetwork.com/b-61.htmlpiter pisze:Działanie programu raczej nie zakończy się nie powodzeniem. Czy więc ten dopisek wynika z dobrych zasad pisania kodu w C++?
[+] Funkcja getch() w C++
Co do system("PAUSE");
I wynik programu:
No cóż. Raczej nie trzeba tego komentować. Zresztą wszystko dokładnie jest wyjaśnione w linku jaki podał Rad. Po tym eksperymencie całkowicie zgadzam się autorem tego tekstu.
[quote="Rad"]Funkcja main zwraca int, więc pominięcie instrukcji return jest trochę partaczeniem kodu ]
Proszę mnie wyprowadzić z błędu jeśli źle to rozumiem: Program napisany w C++ jest funkcją main(). Funkcja z założenia zwraca jakąś wartość, w tym przypadku liczbę całkowitą (int).
Kod: Zaznacz cały
#include <stdlib.h>
using namespace std;
int main()
{
system("pause");
return 0;
}
Kod: Zaznacz cały
sh: pause: command not found
[quote="Rad"]Funkcja main zwraca int, więc pominięcie instrukcji return jest trochę partaczeniem kodu ]
Proszę mnie wyprowadzić z błędu jeśli źle to rozumiem: Program napisany w C++ jest funkcją main(). Funkcja z założenia zwraca jakąś wartość, w tym przypadku liczbę całkowitą (int).
Owszem. Z tym że funkcja może zwracać void czyli... nic.
Generalnie to jest to co lubię w ,,uczeniu" programowania. Pojawiają się jakieś dziwne fragmenty kodu, których mam wrażenie że nie rozumie nie tylko uczący się (no bo skąd), ale i uczący... A przecież wystarczy wytłumaczyć prostą i logiczną rzecz, o której napisał piter. Program to nic innego jak funkcja. Jako funkcja zwraca to, co jej kazaliśmy zwracać (w tym wypadku int). Nie zwrócenie wartości samo w sobie już jest błędem. Co więcej dobrym nawykiem jest przekazywanie informacji o powodzeniu (lub nie) programu. Inaczej nie wiemy nawet co się stało czasem. A dlaczego warto tą zasadę stosować już przy programach na poziomie Hello world? Bo jak nie zaczniemy teraz, to później będzie nam bardzo ciężko zmienić nawyk.
Generalnie to jest to co lubię w ,,uczeniu" programowania. Pojawiają się jakieś dziwne fragmenty kodu, których mam wrażenie że nie rozumie nie tylko uczący się (no bo skąd), ale i uczący... A przecież wystarczy wytłumaczyć prostą i logiczną rzecz, o której napisał piter. Program to nic innego jak funkcja. Jako funkcja zwraca to, co jej kazaliśmy zwracać (w tym wypadku int). Nie zwrócenie wartości samo w sobie już jest błędem. Co więcej dobrym nawykiem jest przekazywanie informacji o powodzeniu (lub nie) programu. Inaczej nie wiemy nawet co się stało czasem. A dlaczego warto tą zasadę stosować już przy programach na poziomie Hello world? Bo jak nie zaczniemy teraz, to później będzie nam bardzo ciężko zmienić nawyk.
Program w C++ jest zbiorem wszystkich funkcji i danych, nie tylko main(). Po prostu standardowo po włączeniu programu wywołuje się funkcja main(), a program kończy się po wyjściu z funkcji main().piter pisze:Proszę mnie wyprowadzić z błędu jeśli źle to rozumiem: Program napisany w C++ jest funkcją main(). Funkcja z założenia zwraca jakąś wartość, w tym przypadku liczbę całkowitą (int).
Więcej informacji: http://en.wikipedia.org/wiki/Main_funct ... ramming%29
Co do void main() to standard c++ określa, że takie użycie jest niepoprawne, ponieważ funkcja main() powinna zwracać int. Tutaj więcej informacji: http://users.aber.ac.uk/auj/voidmain.shtml
Standard języka nakazuje, aby funkcja main() była typu int. Kiedyś można było używać void main i nie zwracać nic, ale to stare dzieje. Tak samo jak nagłówki C++ - było iostream.h, jest iostream.
Jeżeli nie stosujesz się do standardu, to tylko od kompilatora zależy zachowanie - w jednym się skompiluje, w innym będzie ostrzeżenie, w jeszcze innym może być błąd kompilacji.
Jeżeli nie stosujesz się do standardu, to tylko od kompilatora zależy zachowanie - w jednym się skompiluje, w innym będzie ostrzeżenie, w jeszcze innym może być błąd kompilacji.
Akurat przy funkcji main można opuścić return i nie jest to partaczenie! Nie ma to wpływu na program. Dzieje się tak też ze względów historycznych, w funkcji main więc nie mamy przymusu pisać returna. Co się dzieje gdy go nie ma? Kompilator zachowa się tak jakby na końcu jednak był 'return 0;' czyli zwróci na zero.Funkcja main zwraca int, więc pominięcie instrukcji return jest trochę partaczeniem kodu. Mimo, że praktycznie nie zmienia to działania programu.
Tradycyjne zwrócenie zero przez main oznacza poprawne zakończenie programu, jeśli zostaje jakaś inna wartość zwrócona to zazwyczaj podczas działania programu wystąpił jakiś błąd. (np. odniesienie się do elementu, pustego kontenera)
Co do getch'a to biblioteka NCurses go oferuje.
pietrzuch napisał:
Kompiluje tym poleceniem:
Program wyświetla napis i kończy działanie bez czekania na naciśnięcie klawisza.
Już wcześniej tego próbowałem:Co do getch'a to biblioteka NCurses go oferuje.
Kod: Zaznacz cały
#include <iostream>
#include <ncurses.h>
using namespace std;
int main ()
{
cout << "Naciśnij dowolny klawisz" << endl;
getch();
}
Kod: Zaznacz cały
g++ -lncurses kod.cc
Aj...
Używając NCurses strumień (cout/cin) zostawiamy w spokoju, a zamiast nich używamy NCursowych funkcji.
Musisz też przed użyciem biblioteki wywołać funkcję initscr().
Spróbuj tego kodu:
Apropo to NCurses ma świetną dokumentację, a kurs tej biblioteki też bez problemu znajdziesz. ;-)
Używając NCurses strumień (cout/cin) zostawiamy w spokoju, a zamiast nich używamy NCursowych funkcji.
Musisz też przed użyciem biblioteki wywołać funkcję initscr().
Spróbuj tego kodu:
Kod: Zaznacz cały
#include <ncurses.h>
int main()
{
initscr();
printw("Nacisnij dowolny klawisz!");
getch();
endwin();
}