2016-04-06 6 views
0

Ich programmiere ein MCU. Dies ist die Beschreibung der Funktion . Es gibt einen Bool zurück.c Programm einen Int einem Bool zuweisen?

Kann ich dies einer int ack zuweisen? und testen, ob ack eine 0 oder 1 ist?

Dank

/** 
* Read the current value of a single pin on a given GPIO port. 
* 
* @param[in] gpio GPIO port index. 
* @param[in] pin Pin of GPIO port to read. 
* @return bool Value of the pin specified on GPIO port. 
*/ 
bool gpio_read_pin(const gpio_t gpio, const uint8_t pin); 



void sendCommandSHT(int command) 
{ 

    ... 

    int ack; 

    ack = gpio_read_pin(QM_GPIO_0, DATA_PIN); 

    if (ack != 0) { 
     TI_PUTS("Ack Error 0"); 
    } 
} 
+1

Vielleicht ist es nur ich, aber es scheint irgendwie ... sinnlos? –

+0

Ja, Sie können einer Integer-Variablen einen ganzzahligen Wert zuweisen. Stellen Sie nur sicher, dass der Wert in die Variable passt. – Olaf

Antwort

1

Original-C hat nicht wirklich einen bool Typen. Allerdings ist es in der Regel wie folgt definiert:

typedef enum { false = 0, true = 1 } bool;

Kann ich zuweisen diese in einen int ack? und testen, ob ack eine 0 oder 1 ist?

Also für Ihr Q - ja.


In C99 bool Typ Sie können existiert zuweisen, mit <stdbool.h>

+0

C sehr gut ** hat ** einen booleschen Typ! Und das 'Enum' ist ein strenges nicht. Verwende 'stdbool.h'. – Olaf

+0

@Olaf ist es nicht vor C99, editted – artm

+0

Wenn nicht anders erwähnt, eine Frage ist über Standard C. Das ist derzeit C11. Lesen Sie die Info-Seite. Und 'bool' ist ein Makro für den eigentlichen Namen des Typs. – Olaf

1

Ja, ein int Wert zu einem bool Objekt. Beide sind Integertypen und der Wert wird implizit konvertiert.

Alte Versionen von C, vor 1999, hatten keinen eingebauten booleschen Typ. Es war üblich, Workarounds wie z.

typedef enum { false, true } bool; 

oder

#define false 0 
#define true 1 
typedef int bool; 

für einen solchen Typ hängt das Verhalten der Umwandlung auf, wie die Booleschen Typ definiert ist. Wenn bool ein Alias ​​für int ist, ist die Konvertierung trivial. Wenn der konvertierte Wert genau 0 oder 1 ist, lautet das Ergebnis false bzw. true. Wenn der Wert etwas anderes ist, können Sie einen Wert erhalten, der weder false noch true ist, aber das wird als wahr behandelt, wenn es als Bedingung verwendet wird (aber nicht im Vergleich für die Gleichheit zu true - also tun Sie das nicht). Sie können sogar einen unspezifizierten Wert erhalten, der 0 für einen Wert ungleich Null int sein könnte (zum Beispiel, wenn bool als char definiert ist und die höherwertigen Bits verworfen werden).

Wenn Sie nicht in der Lage sind moderne C zu verwenden, entweder, weil Sie haben einen Pre-C99-Compiler oder weil Sie auf Legacy-Code arbeiten, können Sie den Wert normalisieren:

int n = 42; 
bool b = (n == 0 ? false : true); 

oder

bool b = n != 0 

oder

bool b = !!n; 

C99 hinzugefügt, um eine des Typs mit eingebauter _Bool, die wr sein kann itten als bool wenn Sie #include <stdbool.h> haben. Die Umwandlung in _Bool normalisiert automatisch den Wert.Die Umwandlung eines int in den Typ _Bool ergibt 0 (false), wenn der Wert gleich Null ist, andernfalls 1 (true).