Vergleich mehrerer ganzzahliger Werte für die Gleichheit

7

Wenn ich zwei ganzzahlige Werte habe, kann ich einfach auf Gleichheit prüfen:

%Vor%

Wenn ich drei ganzzahlige Werte habe, könnte ich etwas tun wie:

%Vor%

Ich habe eine Situation, wo ich 6 Werte habe, um auf Gleichheit zu testen, dieser Ansatz wird ausführlich werden

Ist ihr ein besserer und mehr C idiomatischer (c-onic?) Mittel, um das zu erreichen?

eigentlich, nur das geschrieben habe, kann ich das sehen:

%Vor%

ist logisch in Ordnung, d. h. Sie brauchen nicht alle Kombinationen als a == b und b == c impliziert a == c

Aber in Bezug auf die Klarheit des Ausdrucks, wie nah kann ich dazu kommen:

if (a == b == c) ?

    
bph 05.05.2016, 13:36
quelle

4 Antworten

7

Sie werden nicht sehr nah an a == b == c kommen.

Um erfahrene C-Programmierer am wenigsten zu überraschen, denke ich, dass das am besten ist

%Vor%

d. im Grunde wie das, was Sie bereits haben, mit weniger Klammern. Ich bin nicht immer dagegen, Klammern hinzuzufügen, die für den Compiler keinen Unterschied machen, um Menschen zu helfen, die nicht alle Präzedenzregeln kennen, aber ich denke, Vergleiche, die durch && (ohne || eingemischt) getrennt sind, sind einfach genug Fall, dass die Klammern mehr Unordnung sind, als sie wert sind.

Wenn die Variablennamen lang sind, ist es nicht schön, alles auf eine Zeile zu setzen, also vielleicht

%Vor%

oder das ist besser, da die Duplizierung der a in jeder Zeile sofort bemerkbar ist:

%Vor%

Wenn Sie wirklich wollen, dass es kompakt ist, bietet die p99 Präprozessorbibliothek Folgendes:

%Vor%

sieht wie John Zwincks Antwort aus, benötigt aber keine Hilfsfunktion.

    
Wumpus Q. Wumbley 05.05.2016, 14:14
quelle
7

Ich kann Ihnen zeigen, wie man es in einem variadischen Makro macht, damit wir das schreiben können:

%Vor%

Hier ist der Code:

%Vor%

Bitte beachten Sie, dass das obige nur für int arguments funktioniert (und wahrscheinlich auch für andere Typen mit der gleichen Größe wie int , obwohl ich mich darauf freue, jemanden anzuklagen, der undefiniertes Verhalten fördert, wenn ich das annonciere!).

Dank dieses vorherigen Posts, um herauszufinden, wie man Argumente in einem variadischen Makro zählt: Ссылка

    
John Zwinck 05.05.2016 13:56
quelle
6

Wenn Sie sechs Werte überprüfen möchten, wäre ein Ansatz, sie in einem Array zu speichern

%Vor%     
Rishikesh Raje 05.05.2016 13:43
quelle
2

Bei Ansätzen, die Arrays verwenden, müssen Sie Ihre Datenstruktur in ein Array ändern.

Ansätze, die ein variadisches Makro verwenden, benötigen einen zusätzlichen Funktions- und Funktionsaufruf (Overhead).

Abgesehen von diesen beiden Ansätzen ist der einzige andere Weg, den ich sehe, sie aufzuschreiben. Ich fühle den besten Weg, oder den klareren Weg, die erste Variable zu nehmen und sie mit allen anderen Variablen zu vergleichen. Implizit sind dann entweder alle Variablen gleich, oder mindestens zwei Variablen sind ungleich:

%Vor%     
Paul Ogilvie 05.05.2016 14:10
quelle

Tags und Links