Ich las this Tutorial von Stanford, wo sie sagen:Bad Klammern in Makrodefinition
gemeinsame Codierung Fehler:
Bad Klammern in Makrodefinition
#define min(a, b) a<b?a:b // incorrect
#define min(a, b) (((a)<(b))?(a):(b)) // correct
Ich lief dies auch in ein Programm, es hat gut funktioniert.
Kann jemand erklären, was sie sagen wollen!
Entweder Form ist schlecht. Der richtige Weg, dies zu tun ist 'int min (int a, int b) {zurück a Lundin
Sie müssen bedenken, dass Makros keine Funktionen sind, sie ersetzen buchstäblich nur den von Ihnen definierten Text. Wenn Sie sie also in komplexeren Situationen verwenden, wie jemand bereits darauf hingewiesen hat, könnten Sie einige Probleme finden: –
Die Notwendigkeit für Klammern in Makros in C] (https://stackoverflow.com/questions/10820340/the-need-for-parentheses-in-macros-in-c) –