use - Einzeilige C++-Kommentare gefolgt von \ transforms in mehrzeiligem Kommentar




code call (6)

http://www.cplusplus.com/forum/general/33653/

Sie können das "\" an beliebiger Stelle im Code hinzufügen und die Zeilenumbrüche werden ignoriert.

Zur besseren Bezugnahme auf den 2.2-Absatz der Norm:

Jede Instanz eines Backslash-Zeichens (), dem unmittelbar ein Zeichen für eine neue Zeile folgt, wird gelöscht, wodurch physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden. Nur der letzte Backslash in einer physischen Quellzeile kann Teil eines solchen Spleißes sein. Wenn als Ergebnis eine Zeichenfolge erzeugt wird, die der Syntax eines universellen Zeichennamens entspricht, ist das Verhalten undefiniert. Eine Quelldatei, die nicht leer ist und nicht mit einem Zeilenumbruch endet, oder die mit einem Zeilenumbruch endet, dem ein Backslash-Zeichen vorangestellt ist, bevor ein solches Splicing erfolgt, wird so behandelt, als wäre ein zusätzlicher Zeilenzeichen wurden an die Datei angehängt.

Dies ist nicht klar, was passiert, wenn das letzte Zeichen in der Datei ein Backslash ist. In einem solchen Fall sollte das Ergebnis des Hinzufügens der neuen Zeile vermutlich kein Linien-Splice sein, sondern eher ein Backslash-Vorverarbeitungstoken (das in Phase 7 als ungültiges Token diagnostiziert wird), aber das sollte angegeben werden.

Wo ist im C ++ - Standard die Funktion dokumentiert, dass, wenn eine Zeile mit //some comment\ style (am Ende der Zeile \ ) gesetzt wird, der Kommentar in eine Multilinie umgewandelt wird?

Getestet mit g ++ 4.8 und VS 2012

//some interesting stuff\
another interesting stuff\
etc

Es ist im C ++ - Standard, wie alles über die C ++ - Sprache. Sie können einen Entwurf des C ++ - Standards kostenlos herunterladen (für fast alle, außer für Personen, die an der Gestaltung der C ++ - Sprache und der Compiler-Autoren beteiligt sind, ist der Entwurf gut genug), google für "C ++ Standard Draft".


Möchten Sie für C oder C ++ wissen? ( EDIT: In der ursprünglichen Frage OP nach C / C ++ gefragt)

Für C folgenden Abschnitt aus ISO / IEC 9899: TC2 Committee Draft vom 6. Mai 2005 beantwortet WG14 / N1124 Ihre Frage.

5.1.1.2 Übersetzungsphasen

[2] Jede Instanz eines Backslash-Zeichens (), dem unmittelbar ein Zeichen für eine neue Zeile folgt, wird gelöscht, wobei physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden. Nur der letzte Backslash in einer physischen Quellzeile kann Teil eines solchen Spleißes sein. Eine nicht leere Quelldatei muss mit einem neuen Zeilenende enden, dem vor einem solchen Splicing nicht sofort ein Backslash-Zeichen vorangestellt werden darf.

Für C ++ können Sie sich auf Phase 2 unter en.cppreference.com beziehen

1) Wenn ein Backslash am Ende einer Zeile erscheint (unmittelbar gefolgt von dem Zeilenumbruchzeichen), werden sowohl der Backslash als auch der Newline gelöscht, wobei zwei physische Quellzeilen zu einer logischen Quellzeile zusammengefasst werden. Dies ist eine Operation mit einem Durchlauf. Eine Zeile, die in zwei umgekehrten Schrägstrichen endet, gefolgt von einer leeren Zeile, kombiniert keine drei Zeilen zu einer Zeile. Wenn in dieser Phase ein universeller Zeichenname (\ uXXX) gebildet wird, ist das Verhalten undefiniert.
2) Wenn eine nicht leere Quelldatei nach diesem Schritt nicht mit einem Zeilenvorschub endet (unabhängig davon, ob sie ursprünglich keine Zeilenumbrüche hatte oder mit einem umgekehrten Schrägstrich endete), ist das Verhalten undefiniert (bis C ++ 11) ein abschließender Zeilenumbruch hinzugefügt (seit C ++ 11)

Wenn Ihre aktuelle Zeile ein einzeiliger Kommentar ist, wird die folgende Zeile als Kommentar verdaut.


Gemäß Working Draft, Standard für die Programmiersprache C ++ , Kapitel 2 Lexikalische Konventionen, 2.1 - 2):

Jede Instanz eines neuen Zeilenzeichens und eines unmittelbar vorangehenden Backslash-Zeichens, eines Backslash-Zeichens (), unmittelbar gefolgt von einem neuen Zeilenzeichen, wird gelöscht, wodurch physische Quellzeilen zu logischen Quellzeilen zusammengefügt werden. Nur der letzte Backslash in einer physischen Quellzeile kann Teil eines solchen Spleißes sein.

Dies gilt auch für Kommentare und ist immer noch Teil der endgültigen Version.


Eine \ gefolgt von einer neuen Zeile wird sehr früh im Übersetzungsprozess entfernt, bevor der Compiler nach Kommentaren und dem Ende von Kommentaren sucht, siehe Abschnitt 2.2, Phasen der Übersetzung.


Ich mag Darren Cooks und Stapler die Antworten auf dieses Problem. Ich war gerade dabei, meine Gedanken in einen Kommentar zu diesen zu stecken, aber ich glaube, mein Ansatz ist zu antworthaft, um nicht hier zu bleiben.

Kurz zusammengefasst haben Sie einen Algorithmus identifiziert, mit dem Sie feststellen können, dass ein Coca-Cola-Logo an einer bestimmten Stelle im Raum vorhanden ist. Sie versuchen nun, für beliebige Orientierungen und willkürliche Skalierungsfaktoren eine Heuristik zu finden, die geeignet ist, Coca-Cola- Dosen von anderen Objekten zu unterscheiden, einschließlich: Flaschen , Werbetafeln , Werbungen und Coca-Cola-Utensilien, die alle mit diesem ikonischen Logo verbunden sind. Sie haben nicht viele dieser zusätzlichen Fälle in Ihrer Problembeschreibung genannt, aber ich denke, sie sind entscheidend für den Erfolg Ihres Algorithmus.

Das Geheimnis besteht hier darin, zu bestimmen, welche visuellen Merkmale eine Dose enthält, oder durch den negativen Raum, welche Merkmale für andere Coke-Produkte vorhanden sind, die für Dosen nicht vorhanden sind. Zu diesem Zweck skizziert die aktuelle Top-Antwort einen grundlegenden Ansatz für die Auswahl von "kann", wenn und nur wenn "Flasche" nicht identifiziert wird, entweder durch das Vorhandensein einer Flaschendeckel, Flüssigkeit oder andere ähnliche visuelle Heuristiken.

Das Problem ist, dass dies zusammenbricht. Eine Flasche könnte beispielsweise leer sein und keine Kappe aufweisen, was zu einem falschen Positiv führt. Oder es könnte eine teilweise Flasche mit zusätzlichen Funktionen gemangelt werden, was wiederum zu einer falschen Erkennung führt. Es ist unnötig zu sagen, dass dies weder elegant ist, noch für unsere Zwecke effektiv ist.

Zu diesem Zweck scheinen die richtigsten Auswahlkriterien für Dosen folgende zu sein:

  • Ist die Form der Objekt-Silhouette, wie Sie in Ihrer Frage skizziert haben , korrekt? Wenn ja, +1.
  • Wenn wir annehmen, dass natürliches oder künstliches Licht vorhanden ist, erkennen wir einen Chromumriss an der Flasche, der anzeigt, ob dieser aus Aluminium besteht? Wenn ja, +1.
  • Stellen wir fest, dass die Spiegeleigenschaften des Objekts im Verhältnis zu unseren Lichtquellen korrekt sind ( illustrativer Video-Link zur Lichtquellenerkennung )? Wenn ja, +1.
  • Können wir andere Eigenschaften über das Objekt bestimmen, die es als eine Dose identifizieren, einschließlich, aber nicht beschränkt auf die topologische Bildschrägstellung des Logos, die Ausrichtung des Objekts, die Gegenüberstellung des Objekts (z. B. auf einer ebenen Oberfläche) wie ein Tisch oder im Zusammenhang mit anderen Dosen), und das Vorhandensein einer Zuglasche? Wenn ja, für jeden, +1.

Ihre Klassifizierung könnte dann wie folgt aussehen:

  • Wenn bei jedem Kandidatenmatch ein Coca-Cola-Logo erkannt wurde, zeichnen Sie eine graue Umrandung.
  • Zeichnen Sie für jedes Match über +2 einen roten Rahmen.

Dies hebt den Benutzer visuell hervor, was entdeckt wurde, und hebt schwache Positive hervor, die korrekt als verstümmelte Dosen erkannt werden können.

Die Erkennung jeder Eigenschaft hat eine sehr unterschiedliche Zeit- und Raumkomplexität, und für jeden Ansatz ist ein schneller Durchlauf durch http://dsp.stackexchange.com mehr als sinnvoll, um den für Ihre Zwecke am besten geeigneten und effizientesten Algorithmus zu ermitteln. Meine Absicht hier ist, rein und einfach zu betonen, dass das Erkennen, ob etwas eine Dose ist, indem ein kleiner Teil des Kandidatenerkennungsraums ungültig gemacht wird, nicht die robusteste oder effektivste Lösung für dieses Problem ist, und idealerweise sollten Sie die geeigneten Maßnahmen ergreifen entsprechend.

Und hey, herzlichen Glückwunsch zum Hacker-News-Posting! Im Großen und Ganzen ist dies eine ziemlich grandiose Frage, die der Bekanntheit würdig ist. :)





c++ c