Formatierung constexpr im c ++ - Modus

10

Ich habe vor kurzem angefangen, C ++ 17 zu verwenden, was constexpr if bringt. Dies vermasselt jedoch die c++-modeStandardeinrückung.

// emacs 25.3.2 with --no-init
if constexpr (n == 1) {
    // Why?
  } else if constexpr (n == 2) {
    // This is a mess...
  } else {
  // and it keeps getting weird
}

Hat jemand auch

  1. Kennen Sie eine einfachere Alternative zum CC-Modus?
  2. Wissen Sie, wie ich dieses spezielle Problem beheben kann?
Topisani
quelle

Antworten:

6

UPDATE: Diese Pretest-Version, die ich dort in der ursprünglichen Frage ( emacs-26.0.90.tar.gz) abgelegt habe, hatte einen Fehler, der beim Parsen des Puffers bestimmte Unendlichkeitsschleifen verursachte, insbesondere wenn das <Token in bestimmten Kontexten verwendet wurde, z. <B. beim Schreiben als erstes Zeichen eines leeren Puffers in Java oder C ++ oder nach dem Schlüsselwort template. Der Fehler wurde in der emacs-26Filiale behoben , daher müssen Sie ihn stattdessen herunterladen.


Es dauerte mir viel die Antwort zu finden und zu lernen , wie Eigenschaft das Verhalten in der elisp Sprache anpassen , sondern eine Art und Weise der Befestigung, die auf die durch zu sagen ist , cc-modedass constexprein „Rauschen Name“ ist, was bedeutet , dass sie als behandelt werden ein Leerzeichen und daher vom Parser ignoriert.

Die Sache ist, dass in der letzten stabilen Version von Emacs (25.3) die Funktion zum Hinzufügen von Rauschwörtern nicht hinzugefügt wurde, selbst wenn sie seit Februar 2016 im Repo enthalten ist. Sie müssen also die Nicht-Release-Version herunterladen.

cd tmp_folder_of_your_choice

sudo apt-get install build-essential # if you don't have it yet
sudo apt-get build-dep emacs24 # get all dependancies to build emacs

# Not this: wget https://github.com/emacs-mirror/emacs/archive/emacs-26.0.90.tar.gz

wget -O emacs-26.zip https://github.com/emacs-mirror/emacs/archive/e8636ac8cc96e1e7e948f04091792da09dafcc76.zip

# or just the last version of the branch, but the exact version I have is the one above
# wget https://github.com/emacs-mirror/emacs/archive/emacs-26.zip

unzip emacs-26.zip
cd emacs-emacs-26

./autogen.sh
./configure
make
sudo make install
emacs ~/.emacs

Fügen Sie dann beispielsweise am Ende der .emacsDatei Folgendes hinzu:

; Load the mode before-hand to make the symbols visible
(require 'cc-mode)
(custom-set-variables '(c-noise-macro-names '("constexpr")))
Peregring-lk
quelle
Das ist zwar großartig und ich probiere es jetzt aus, aber es fühlt sich immer noch wie ein Hack an - gibt es einen besseren Weg, es in nur dieser einen syntaktischen Position hinzuzufügen?
Topisani
Ich weiß es nicht, aber diese Lösung funktioniert perfekt für mich.
Peregring-lk
Ja, es funktioniert für mich, mit diesem großartigen Projekt sowie dem neuesten Emacs Git
Topisani
@topisani Könnten Sie bitte diese Frage sehen, wenn Ihnen nach der Installation der letzten Emacs-Version dasselbe passiert? emacs.stackexchange.com/q/36423/14016
Peregring-lk