Προς το περιεχόμενο

erwthsh gia glwsa c


snot

Προτεινόμενες αναρτήσεις

Δημοσ.

Το ! είναι το NOT. Δηλαδή κάνε το loop όσο η sendByte(byte) ΔΕΝ είναι αληθής...

Δημοσ.

Εξαρτάται με το τι επιστρέφει η sendByte(byte).

 

π.χ.

1) bool sendByte(...);

2) BOOL sendByte(...);

3) int bool sendByte(...);

 

Το while(!sendByte(byte)); είναι ισοδύναμο με

1) while( sendByte(byte) == true );

2) while( sendByte(byte) == TRUE );

3) while( sendByte(byte) != 0 );

Δημοσ.

Το while τρέχει όσο ο έλεγχος μέσα στην παρένθεση είναι αληθής (δηλαδή στην C διάφορο από το μηδεν).

Έτσι το while ( function() ) θα τρέχει όσο η συνάρτηση function() επιστρέφει μη μηδενική τιμή.

 

Το ! αυτό που κάνει είναι να αλλάζει την τιμή απο true(Μη μηδενική) σε faulse(Μηδεν) και αντίστροφα.

 

Οπότε στην περίπτωση σου το loop θα τρέχει όσο η συνάρτηση sendByte(byte) επιστρέφει μηδέν ή faulse και όχι true όπως λέει ο ahepa.

Δημοσ.

Για να μην ανοίξω καινούργιο topic για μια ακόμη μάλλον ηλίθια απορία στο παρακάτω:

typedef struct {

__REG32 INT0 :1; //__reg32 defined as unsigned long

__REG32 INT1 :1;

...

το :1 μπορεί να μου κάποιος τι δηλώνει ή τον λόγο ύπαρξης του;

Δημοσ.

Παραθέτω το παρακάτω όπως το βρήκα στα αγγλικά:

>  main()
 {
   struct Flags
   {
     unsigned int Online  :1;   
     unsigned int Mounted :1;
   }

   struct Flags TapeInfo;

   TapeInfo.Online  = 1;
   TapeInfo.Mounted = 0;
 }

The :1 tells the compiler that only 1 byte is required for Online and Mounted. There are a few points to note about this though.

 

* You may expect the compiler to reserve 2 bytes for the structure, it actually reserves one word (usually 4 bytes) as this is the smallest unit that can be reserved, the remaining 2 bytes are unavailable. This is still better than the 2 words that wold normally get reserved.

* You can put any number into the variable, if the number is too large to fit, the high order bits are lost without warning.

* Only signed int, unsigned int, int support this syntax.

Δημοσ.

@ahepa: η C δεν έχει τύπο BOOL, ούτε int bool. Η sendbyte() επιστρέφει κάποια τιμή προφανώς μη μηδενική αν πέτυχε και μηδενική αν απέτυχε. Αν κάνεις !0 αυτό ισοδυναμεί με true. Συνεπώς, ισχύει ότι είπε ο bird.

 

@bird: το

>
struct A {
 unsigned int i:1;
};

σημαίνει ότι ο προγραμματιστής θέλει το i να είναι ένα (1) bit και όχι byte. Για λόγους ταχύτητας, ναι μεν δεν αγνοείται η δήλωση, αλλά εν τέλει το sizeof (struct A)==4 σε κάποιο 32bit μηχάνημα (δηλαδή ένας int) μια και θα προστεθούν και alignment bits - η κατάσταση ίσως αλλάξει αν κάνεις optimize για το δυνατόν ελάχιστο memory footprint της εφαρμογής.

Δημοσ.

Thanx dop. Εξάλλου κι εγώ δεν το είχα ξαναδεί το :1 οπότε το έγραψα όπως το βρήκα στο δύκτιο. :)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...