Προγραμματισμός σε Ubuntu

...IDE, compilers, κλπ

Συντονιστής: konnn

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό Dimitris » 09 Ιούλ 2008, 11:48

Βεβαια ακομη και για C, συγκεκριμενα για gtk, υπαρχει το πρόγραμμα glade (ή κάπως έτσι δε θυμάμαι ακριβως, υπαρχει στα repositories) το οποίο κάνει αυτήν ακριβώς τη δουλειά. Υπάρχουν και αντίστοιχα για python. Βέβαια δεν τα χρησιμοποιώ γιατί προτιμώ να γράφω κώδικα, πάντα κάτι καινούριο μαθαίνω.
Άβαταρ μέλους
Dimitris
saintTUX
saintTUX
 
Δημοσιεύσεις: 1357
Εγγραφή: 13 Μάιος 2008, 13:57
Τοποθεσία: Θεσσαλονίκη
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό gyros » 10 Δεκ 2008, 20:05

Να χαιρετήσω καταρχάς την Ubuntu κοινότητα. Είμαι νέο μέλος ( μόλις γράφτηκα :D ). Θέλω να ρωτήσω κάτι και ελπίζω να είναι το σωστό topic, αν δεν είναι παρακαλώ τους admin να το μεταφέρουν.
Λοιπών έχουμε και λέμε. Έχω ένα 32-bit σύστημα intel pentium 4, 3.0 GHz και έχω και το Ubuntu 8.10. Τώρα που σας γράφω βέβαια είμαι στα windows :oops:
Στα ψητό. Θέλω να γράψω ένα πρόγραμμα σε C και χρειάζομαι μια μεταβλητή τύπου long long int. την ορίζω αλλά δεν μου την αναγνωρίζει και μου κάνει από μόνο του cast σε long int :cry: :evil: και δεν ξέρω τι φταίει. Το compile το κάνω με gcc. Μήπως χρειάζεται καμιά έξτρα βιβλιοθήκη να κάνω include??????

Παραθέτω και τον κώδικα:
Κώδικας: Επιλογή όλων
#include <stdlib.h>
#include <stdio.h>

void printbit( long long int );

int main()
{
   long long int CRC = 0x104C11DB7;

   //printf( "%x", CRC );

   printbit( CRC );
   
   printf( "\n" );

   system( "pause" );
   return 0;
}

void printbit( long long int x )
{
   int bit;
   
   for ( bit = 1; bit <= 8 * sizeof( long long int ); bit++ )
   {
   
      if( x & 0x80000000 )
      {
         printf( "1" );
         x <<= 1;
      }
      else
      {
         printf( "0" );
         x <<= 1;
      }
      
      if( bit % 8 == 0)
         printf( " " );
   }
}


Παραθέτω και το αποτέλεσμα από την μεταγλώττιση και την εκτέλεση.
Εικόνα
Τελευταία επεξεργασία από gyros και 10 Δεκ 2008, 21:24, έχει επεξεργασθεί 1 φορά/ες συνολικά
gyros
babeTUX
babeTUX
 
Δημοσιεύσεις: 12
Εγγραφή: 10 Δεκ 2008, 19:44
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό simosx » 10 Δεκ 2008, 20:30

Είναι sizeof(int) = 4 και sizeof(long) = 8.
Τα long long int, long long, κτλ είναι νομίζω το ίδιο με long (8 byte).
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό sudobash » 10 Δεκ 2008, 20:40

gyros έγραψε:Να χαιρετήσω καταρχάς την Ubuntu κοινότητα. Είμαι νέο μέλος ( μόλις γράφτηκα :D ). Θέλω να ρωτήσω κάτι και ελπίζω να είναι το σωστό topic, αν δεν είναι παρακαλώ τους admin να το μεταφέρουν.
Λοιπών έχουμε και λέμε. Έχω ένα 32-bit σύστημα intel pentium 4, 3.0 GHz και έχω και το Ubuntu 8.10. Τώρα που σας γράφω βέβαια είμαι στα windows :oops:
Στα ψητό. Θέλω να γράψω ένα πρόγραμμα σε C και χρειάζομαι μια μεταβλητή τύπου long long int. την ορίζω αλλά δεν μου την αναγνωρίζει και μου κάνει από μόνο του cast σε long int :cry: :evil: και δεν ξέρω τι φταίει. Το compile το κάνω με gcc. Μήπως χρειάζεται καμιά έξτρα βιβλιοθήκη να κάνω include??????


Ίσως βοηθήσει αυτό.
Ubuntu 9.10 32bit | 2 x Intel Core 2 Duo T5500 @ 1.66GHz | 2GB DDR2 RAM | Intel 950 Graphics
Richard Stallman wrote the compiler God used. The Big Bang was the Universe's first segfault.
Άβαταρ μέλους
sudobash
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 876
Εγγραφή: 13 Μάιος 2008, 20:11
Τοποθεσία: Κρήτη
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό gyros » 10 Δεκ 2008, 20:49

Και όμως εδώ είναι το παράξενο. Το κοίταξα αυτό το θέμα και το sizeof( int ) και το sizeof( long int ) είναι ίδιο, 4-byte. Το sizeof( long long int ) μου βγάζει 8-byte.
Αλλά παρόλα αυτά μου το κάνει cast σε long int. Και έτσι σκέφτομαι μήπως πρέπει να κάνω include κάποια συγκεκριμένη βιβλιοθήκη. Βέβαια πριν ποστάρω έκανα και ένα googlάρσμα, αλλά δεν βρήκα και τίποτα. Μόνο από κάτι κομμάτια κώδικα που είδα δεν έκανε κανείς καμιά ιδιαίτερη βιβλιοθήκη include. Και για αυτό πήρα την απόφαση να κάνω ποστ.

Λέτε να μου λείπει καμιά βιβλιοθήκη από τον GCC???? Αν και σκέφτομαι και τον ενδεχόμενο μήπως παίζει ρόλο και το μηχάνημα, για αυτό έβαλα και το μοντέλο του επεξεργαστή.
gyros
babeTUX
babeTUX
 
Δημοσιεύσεις: 12
Εγγραφή: 10 Δεκ 2008, 19:44
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό simosx » 10 Δεκ 2008, 20:59

gyros έγραψε:Και όμως εδώ είναι το παράξενο. Το κοίταξα αυτό το θέμα και το sizeof( int ) και το sizeof( long int ) είναι ίδιο, 4-byte. Το sizeof( long long int ) μου βγάζει 8-byte.
Αλλά παρόλα αυτά μου το κάνει cast σε long int. Και έτσι σκέφτομαι μήπως πρέπει να κάνω include κάποια συγκεκριμένη βιβλιοθήκη. Βέβαια πριν ποστάρω έκανα και ένα googlάρσμα, αλλά δεν βρήκα και τίποτα. Μόνο από κάτι κομμάτια κώδικα που είδα δεν έκανε κανείς καμιά ιδιαίτερη βιβλιοθήκη include. Και για αυτό πήρα την απόφαση να κάνω ποστ.

Λέτε να μου λείπει καμιά βιβλιοθήκη από τον GCC???? Αν και σκέφτομαι και τον ενδεχόμενο μήπως παίζει ρόλο και το μηχάνημα, για αυτό έβαλα και το μοντέλο του επεξεργαστή.


Για την getch() που προσπαθείς να κάνεις, υπάρχει μια νέα ανάρτηση στην κατηγορία Προγραμματισμός του φόρουμ που αναφέρει πως μπορεί να γίνει μέσω Linux.

Μπορείς να δείξεις τη συγκεκριμένη γραμμή που κάνει τη μετατροπή από int σε long int;
Θα είναι πιο εύκολο για πάρεις κάποια βοήθεια.

Ακόμα, σε θέματα implicit conversion, δεν υπάρχει ζήτημα με βιβλιοθήκες διότι η όλη δουλειά γίνεται απόκλειστικά από τον μεταγλωττιστή.
Οπότε, στην περίπτωσή σου, το πιο πιθανό είναι να γίνεται implicit conversion διότι κάποια από τις πράξεις παράξει πληροφορία που είναι >4byte.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό gyros » 10 Δεκ 2008, 21:38

Προσπάθησα να βάλω στο αρχικό ποστ μια φωτογραφία από τον φλοιό από την μεταγλώττιση και την εκτέλεση του κώδικα που έδωσα. Το λάθος γίνεται με την δήλωση της μεταβλητής CRC. Την δηλώνω long long int και ο compiler μου την καταχωρεί ως να είναι απλά long int και έτσι χάνεται κάποια πληροφορία. Αυτό που προσπαθώ να κάνω είναι να μπορέσω να φτιάξω μια συνάρτηση για να εκτυπώνει στην οθόνη έναν ακέραιο ή δεκαεξαδικό στην οθόνη σε δυαδική μορφή και χωρισμένη σε 8άδες bit. Η συνάρτηση δουλεύει ή για να είμαστε και ακριβείς φαίνεται να δουλεύει. Το θέμα είναι ότι για την δουλειά που το θέλω εγώ θέλω να χρησιμοποιήσω ακέραιους πάνω από 4-byte, το long long int προσφέρει 8. Και το θέμα είναι ότι τον δεκαεξαδικό που αρχικοποιώ στην CRC θέλει 5 -bytes. Και ενώ θεωρητικά θα έπρεπε να αποθηκευτεί ολόκληρος, αποθηκεύονται μόνο τα πρώτα 4 byte του δεκαεξαδικού. ως να ήταν απλώς long int η μεταβλητή CRC. Ελπίζω να έγινα κατατοπιστικότερος.
gyros
babeTUX
babeTUX
 
Δημοσιεύσεις: 12
Εγγραφή: 10 Δεκ 2008, 19:44
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό simosx » 10 Δεκ 2008, 22:05

gyros έγραψε:Προσπάθησα να βάλω στο αρχικό ποστ μια φωτογραφία από τον φλοιό από την μεταγλώττιση και την εκτέλεση του κώδικα που έδωσα. Το λάθος γίνεται με την δήλωση της μεταβλητής CRC. Την δηλώνω long long int και ο compiler μου την καταχωρεί ως να είναι απλά long int και έτσι χάνεται κάποια πληροφορία. Αυτό που προσπαθώ να κάνω είναι να μπορέσω να φτιάξω μια συνάρτηση για να εκτυπώνει στην οθόνη έναν ακέραιο ή δεκαεξαδικό στην οθόνη σε δυαδική μορφή και χωρισμένη σε 8άδες bit. Η συνάρτηση δουλεύει ή για να είμαστε και ακριβείς φαίνεται να δουλεύει. Το θέμα είναι ότι για την δουλειά που το θέλω εγώ θέλω να χρησιμοποιήσω ακέραιους πάνω από 4-byte, το long long int προσφέρει 8. Και το θέμα είναι ότι τον δεκαεξαδικό που αρχικοποιώ στην CRC θέλει 5 -bytes. Και ενώ θεωρητικά θα έπρεπε να αποθηκευτεί ολόκληρος, αποθηκεύονται μόνο τα πρώτα 4 byte του δεκαεξαδικού. ως να ήταν απλώς long int η μεταβλητή CRC. Ελπίζω να έγινα κατατοπιστικότερος.


Τώρα κατάλαβα.
Το ζήτημα είναι με το μεταγλωττιστή.
Αντί για

long long int CRC = 0x104C11DB7;
πρέπει να γράψεις
long long int CRC = 0x104C11DB7L;

Δηλαδή, αν μια σταθερά είναι long, βάζεις ένα L στο τέλος της. Για unsigned long, βάζεις UL κτλ.
Μιας και long, long long είναι το ίδιο, αρκεί να το αφήσεις ως long.
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό gyros » 11 Δεκ 2008, 01:51

Παίδες σας ευχαριστώ για τον κόπο σας. Μόλις βρήκα που είναι το λάθος μου. Όπως πάντα δεν ήταν κανένα συντακτικό λάθος ή λάθος του compiler. Ήταν λογικό σφάλμα. Εκεί που ορίζω τον δεκαεξαδικό 0x8000000000 θέλει 9 μηδενικά γιατί μιλάμε για 5-byte αριθμούς που περιέχουν 40 bit. Άρα αν κάθε 4 bit αντιστοιχούν σε έναν δεκαεξαδικό χαρακτήρα, τότε 40 / 4 = 10 χαρακτήρες δεκαεξαδικού, άρα 0x8000000000 και όχι 0x8000000 που είχα βάλει εγώ :roll: :? :shock: :oops: :| .
Πάντως όπως και να έχει σας ευχαριστώ για τον χρόνο σας, που σας έφαγα με ένα τόσο γελείο λάθος.

Όπως simosx έχεις δίκιο για το L μόνο που θέλει δύο LL ,δηλαδή long long int CRC = 0x104C11DB7LL; και βγάζει την προειδοποίηση του compiler. Αλλά και χωρίς το LL κάνει κανονικά την καταχώρηση μόνο που σου βγάζει warning o compiler.

Τι μπορεί να σου κάνει ένα τόσο δα μικρό λαθάκι από απροσεξία :lol: :lol: :lol: :lol:
gyros
babeTUX
babeTUX
 
Δημοσιεύσεις: 12
Εγγραφή: 10 Δεκ 2008, 19:44
Εκτύπωση

Re: Προγραμματισμός σε Ubuntu

Δημοσίευσηαπό bullgr » 12 Δεκ 2008, 20:15

Όπως πάντα το λογικό λάθος εντοπίζεται δύσκολα... Και αυτό επειδή είμαστε "δήθεν" 100% σίγουροι ότι λειτουργεί σωστά. Μόνο όταν φτάσουμε σε σημείο απελπισίας και ψάχνουμε τον κώδικα διεξοδικά, τότε βλέπουμε το logical error... :mrgreen:
ΕΠΙΤΡΕΠΕΤΑΙ ΝΑ ΠΕΣΕΙΣ, ΕΠΙΒΑΛΛΕΤΑΙ ΝΑ ΣΗΚΩΘΕΙΣ... HASTA SIEMPRE...
Άβαταρ μέλους
bullgr
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 1853
Εγγραφή: 10 Μάιος 2008, 21:45
Εκτύπωση

ΠροηγούμενηΕπόμενο

  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Εφαρμογές για Ανάπτυξη Λογισμικού

cron