void main() ?

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: Super-Moderators, WebDev Moderators

Απάντηση
Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

void main() ?

Δημοσίευση από nirvana » 26 Ιαν 2006 19:05

Θα ηθελα να κανω μια ερωτηση που ισως φανει χαζη για γνώστες C++.
Επειδη δινω προγραμματισμο σε λιγο καιρο διαβαζα το βιβλιο που μας εδωσαν
στη σχολη..

Σε ολα τα παραδειγματα το κυριο μερος αρχιζε με
int main()
{ κ.τ.λ.
και γυρνουσε μια τιμη

Τωρα διαβαζω ενα αλλο βιβλιο που εχει 2-3 παραδειγματα που αρχιζουν με
void main()
και δεν γυρνανε τιμη.
Μπορει να μου πει καποιος με απλα λογια γιατι εγω σε ενα προγραμμα να προτημησω να γραψω void main αντι για int...thanks
:pint:

sibas
Honorary Member
Δημοσιεύσεις: 1850
Εγγραφή: 21 Φεβ 2003 01:21
Τοποθεσία: Μια εδώ.. Μια εκεί.. Σήμερα είμαι εδώ!!!
Επικοινωνία:

void main() ?

Δημοσίευση από sibas » 27 Ιαν 2006 00:30

Χωρίς να το ξέρω καλά το θέμα αλλά επειδή με είχε απασχολήσει στο παρελθόν βρήκα ότι η void main()
δεν λειτουργεί κάτω από την C++, ενώ στην C ακόμα παίζει αλλά όχι σε όλους τους compiler,
όταν λέω οτι δεν λειτουργεί κάτω από C++ εννοώ οτι
α) είναι λάθος σύμφωνα με τα πρότυπα
β) δεν υπάρχει εγγύηση οτι θα δουλέψει
γ) μπορεί να δημιουργήσει προβλήματα ανάλογα με το os και ανάλογα με τον compiler
περισσότερο διάβασμα παρακάτω
http://www.eskimo.com/~scs/readings/voi ... 60823.html

http://homepages.tesco.net/J.deBoynePol ... -main.html

μερικά ελληνικά παραδείγματα που χρησιμοποιούν void main()

http://dide.flo.sch.gr/Plinet/Tutorials ... s-C++.html

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

void main() ?

Δημοσίευση από nirvana » 27 Ιαν 2006 12:57

Thanx Sivas..
Ηταν και η απαντηση και τα links αρκετα διαφωτιστικα..
Καλη συνεχεια. :p

Remali|R|
Δημοσιεύσεις: 13
Εγγραφή: 02 Φεβ 2006 20:53
Επικοινωνία:

void main() ?

Δημοσίευση από Remali|R| » 05 Φεβ 2006 05:21

Δε ξέρω αν αυτά που θα σου πω σου φανούν χρήσιμα αλλά μπορώ να σου επιβεβαιώσω τουλάχιστον τι συμβαίνει στην C
Όταν έχεις μια συνάρτηση για παράδειγμα

int papaki(int a){

commands

}

τότε αυτή η συνάρτηση επιστρέφει μια τιμή σε int…
Όταν τώρα έχεις μια συνάρτηση ….

void papaki(int a){

commands

}

τότε η συνάρτηση αυτή δεν επιστρέφει τίποτα… Και να βάλεις να επιστρέψει δε γίνεται. Απ’ότι θυμάμαι επειδή έχω καιρό να γράψω σε C δημιουργεί πρόβλημα ο compiler. Στην ουσία δηλώνετε σαν μια συνάρτηση σε «Τίποτα» 
Το ίδιο ισχύει και για την main. Και η main μια συνάρτηση είναι απλά καθορίζει την έναρξη του προγράμματος
Μπορείς να κατεβάσεις κάποιες καλές σημειώσεις για C από εδώ
Ελπίζω να βοήθησα σε κάτι!
Gennithikes san Remali|R|, Megaloses san Remali|R|, Sou simperiferthikan san Remali|R|, Zis san Remali|R|, Kai tha pethanis san Remali|R|

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

void main() ?

Δημοσίευση από nirvana » 06 Φεβ 2006 01:12

Thanks remali..;) Mou aresoun poly auta ta link..

Telika ta ellinika panepistimia einai :evil: .
An den kathiseis 45 wres sto internet na to psaxeis monos sou meneis sto
int a,b,c;
c=a+b;
kai telos..
Eleos!

Cmg__
Δημοσιεύσεις: 1710
Εγγραφή: 29 Μαρ 2005 22:40

void main() ?

Δημοσίευση από Cmg__ » 06 Φεβ 2006 17:01

int : δήλωση ακαίρεας μεταβλητής - επιστρέφει τιμή
void: όλα αντίθετα :wink: είναι σαν να επιστρέφει 0 αν δεν κάνω λάθος ότι και να βάλεις...

Άβαταρ μέλους
myle
Δημοσιεύσεις: 205
Εγγραφή: 18 Ιουν 2005 23:59
Τοποθεσία: Πάτρα
Επικοινωνία:

void main() ?

Δημοσίευση από myle » 17 Φεβ 2006 15:48

Τουλάχιστον στην C, αν δεν γράψεις τίποτα πριν την main ο compiler προσθέτει αυτόματα το int και στο τέλος του προγράμματος του return 0. Αν βάλεις void είναι πολύ πιθανό να έχεις πρόβλημα σε κάποιες περιπτώσεις. Η πιο σωστή δήλωση, νομίζω πως είναι η εξής...

Κώδικας: Επιλογή όλων

int main(void){
.......source code........
return 0;
}
Εικόνα

anti13
Δημοσιεύσεις: 59
Εγγραφή: 25 Μάιος 2006 22:21

void main() ?

Δημοσίευση από anti13 » 25 Μάιος 2006 22:52

βαζοντας
int main()
{
//επιστρεφεις τιμή
return x;
}

Ομως με το void δεν γινεται κάτι τετοιο...
Αν πχ θέλουμε να βρούμε το μεσο ορο θα χρησιμοποιησουμε int...
ενα παραδειγμα
int SequentialSearch(int my_array[], int target)
{
bool flag=false;
int i=0;
while(flag==false && i<10)
{
if(my_array==target)
{
flag=true;
return i;
}
i=i+1;
}
return -1;

}
και ενα παραδειγμα void

void PrintArr (int my_array[])
{
for(int i=0; i<SIZE; i++)
{
cout<<my_array<<endl;
}
}
βεβαια δεν ειναι η main() ειναι functions και εδω παιζει σημαντικό ρόλο το πως θα τις ορίσεις....
Ελπίζω να εγινα κατανοητή...


Υ.Γ. και η void k h int δουλευουν στην c++ (τουλάχιστον στο visual studio)....

Άβαταρ μέλους
alkisg
Δημοσιεύσεις: 265
Εγγραφή: 03 Ιουν 2005 11:53
Τοποθεσία: Ιωάννινα
Επικοινωνία:

void main() ?

Δημοσίευση από alkisg » 25 Μάιος 2006 23:19

Το int main σημαίνει ότι θα επιστραφεί μία ακέραια τιμή στο λειτουργικό σύστημα που τρέχει το πρόγραμμα.
Η τιμή αυτή έχει νόημα στα batch files, ώστε να μπορούν να κάνουν διαφορετικές ενέργειες ανάλογα με το αν το πρόγραμμα πέτυχε ή απέτυχε.
Το ποια τιμή θα επιστρέψει είναι user-defined, δηλαδή 0 = success, 1 = π.χ. δε βρήκα το αρχείο, 2 = δεν μπόρεσα να ανοίξω το αρχείο για εγγραφή κτλ.
Ουσιαστικά η τιμή που γίνεται return από τη main έχει την ίδια έννοια με την παράμετρο της συνάρτησης exit().

Στα batchfiles στο DOS μπορείς να δεις τι επίστρεψε η main με τη σύνταξη
IF ERRORLEVEL==...

Δηλώνοντας τη main ως void, απλά αδιαφορείς για τα batch files.

Άβαταρ μέλους
myle
Δημοσιεύσεις: 205
Εγγραφή: 18 Ιουν 2005 23:59
Τοποθεσία: Πάτρα
Επικοινωνία:

void main() ?

Δημοσίευση από myle » 20 Ιουν 2006 12:52

Επειδή μια τιμή πρέπει να επιστραφεί στο λειτουργικό, καλύτερο είναι προγραμματιστικά να κάνεις return 0.
Αλλιώς το αφήνεις στην τύχη, γιατί ούτως ή άλλως μια τιμή θα επιστραφεί.
Εικόνα

Άβαταρ μέλους
teo_ramones
Δημοσιεύσεις: 55
Εγγραφή: 15 Απρ 2005 15:48
Επικοινωνία:

void main() ?

Δημοσίευση από teo_ramones » 24 Ιούλ 2006 01:40

vazeis ena return 0; kai hsyxazeis
:kaloe:

puppetmaster
Δημοσιεύσεις: 11
Εγγραφή: 13 Ιούλ 2007 17:14

void main() ?

Δημοσίευση από puppetmaster » 16 Ιούλ 2007 19:35

Όταν γράφεις:

int main(void)
{
blahblah

return 0;
}

αναγκάζεις το πρόγραμμα να τροφοδοτήσει το OS με σήμα το οποίο μεταφράζεται σε True.
Δλδ αναγκάζεις το σύστημα να αγνοήσει τα floods και τις διαρροές ώστε να τρέξει το script

Αν από την άλλη γράψεις:

void main(void)
{
blahblah
}

Αφήνεις την παραπάνω επιλογή στο λειτουργικό. Το void δεν επιστρέφει 0 αλλά αγνωστο.
Ένα απόλυτα τυχαίο σήμα.
Επομένως υπάρχει πιθανότητα λάθους.

Ελπίζω να έγινα κατανοητός και να σε βοήθησα :smile:
το ninjitsu είναι σαν το σουβλάκι!
αξίζει ότι είναι απο μέσα!
-Δάσκαλος Σοφ-

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

void main() ?

Δημοσίευση από dva_dev » 17 Ιούλ 2007 00:33

αναγκάζεις το πρόγραμμα να τροφοδοτήσει το OS με σήμα...
Μπορείς να εξηγήσεις λίγο τι εννοείς;

Κώδικας: Επιλογή όλων

...
return 0;
...
...το οποίο μεταφράζεται σε True.
Γιατί το 0 μεταφράζεται σε True? Τι θα γινόταν αν επέστρεφε κάποια άλη τιμή π.χ. -1 ή 1 ή 121 σε τι θα μεταφράζονταν;
Δλδ αναγκάζεις το σύστημα να αγνοήσει τα floods και τις διαρροές ώστε να τρέξει το script
Ποιά floods και ποιές διαρροές θα αγνοήσει το σύστημα; Ποιό script θα τρέξει;

puppetmaster
Δημοσιεύσεις: 11
Εγγραφή: 13 Ιούλ 2007 17:14

void main() ?

Δημοσίευση από puppetmaster » 22 Ιούλ 2007 23:07

ΟΚ λάθος διατύπωση....... :lol:



Υπενθύμηση
Κάθε συνάρτηση είτε επιστρέφει τιμή-χρησιμη για τον χρήστη-, είτε όχι, πάντα επιστρέφει μία
τιμή απαιτούμενη από το OS. Το σήμα ελέγχου.



Έτσι η μηδενική επιστρεφόμενη τιμή της main() σηματοδοτεί -κατα κανόνα- τον κανονικό τερματισμό.

Οποιαδήποτε μη μηδενική τιμή υποδηλώνει εσφαλμένες ή ασυνήθιστες συνθήκες τεματισμού.
Για λόγους ασφαλείας (στοιχειώδους ή μη) η έκφραση:

Κώδικας: Επιλογή όλων

...
return 0;
&#125;
Περιλαμβάνεται σε όλα τα προγράμματα

Νομίζω πως τώρα οι περισσότεροι το καταλαβαίνουν....
το ninjitsu είναι σαν το σουβλάκι!
αξίζει ότι είναι απο μέσα!
-Δάσκαλος Σοφ-

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες