Hallo,
ich verwende die aktuelle AS 7.0 Version.
Schreibe ich constexpr wird dieses schon nicht blau. Unbekannt?
Dagegen ist es in der Autovervollständigung enthalten. Seltsam.
1
constexpruint16_ttest(uint8_ta,uint8_tb){
2
return(uint16_t)(a+b);
3
}
4
5
constexpruint16_t_test=test(11,4);
6
7
8
intmain(void)
9
{
10
...
11
...verwende_test...
12
...
Ich bekomme folgende Meldung:
constexpr does not name a typ
identifier constexpr is a keyword in C++ 11
Wie kann man constexpr verwenden?
Muss man dafür eine Lib inkludieren?
Hallo,
lies doch bitte deine Fehlermeldung.
Diese besagt, dass der Compiler sogar erkennt, dass das ein C++11
Keyword ist, aber es nicht beachtet. Das bedeutet, dass er einen älteren
Standard nutzt.
Der Compiler hinter dem Atmel Studio ist der GCC. Dieser hat gewisse
Commandline-Options, die unter anderem auch den verwendeten C++-Standard
angeben. Standard ist glaube ich noch C++98 (don't quote me on this).
http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
Du musst deinem Compiler (g++) also das Flag -std=c++11 bzw.
-std=gnu++11 (oder höher) mitgeben. Sollte sich unter den
Compiler-Einstellungen finden lassen.
Nebenbei: syntax-highlighting und Compiler hängen nicht zusammen.
Mit freundlichen Grüßen,
N.G.
Veit D. schrieb:> ich verwende die aktuelle AS 7.0 Version.
Die erstmal nichts grundegend darüber aussagt, welcher Compiler da
drunter ist. Der ist nämlich austauschbar.
> identifier constexpr is a keyword in C++ 11>> Wie kann man constexpr verwenden?
Indem man dem Compiler sagt, dass er C++11-Code compilieren soll:
-std=c++11. Wie du das dem Studio da sagst, musst du schon mal selbst
gucken gehen. Bestimmt haben sie irgendwo einen Knopf dafür.
Hallo,
Fehlermeldung lesen und wissen was gemeint ist so eine Sache. :-)
Ich hätte nicht gedacht das in AS 7.0 noch nicht C++ 11 aktiviert ist.
Da bin ich echt verdutzt.
Danke.
Veit D. schrieb:> Hallo,>> habs gefunden wo,>> Projekt > Eigenschaften > Toolchain > C++ Compiler > Miscellaneous >> other flags: -std=c++11> eintragen>> ... compiliert :-)>>> Danke.
Dann probiert doch gleich mal -std=c++17 aus ;-)
Wilhelm M. schrieb:> Dann probiert doch gleich mal -std=c++17 aus ;-)
Eine solche Option unterstützt nicht mal der aktuelle gcc 7.2. Aber
-std=c++1z sollte gehen.
Rolf M. schrieb:> Wilhelm M. schrieb:>> Dann probiert doch gleich mal -std=c++17 aus ;-)>> Eine solche Option unterstützt nicht mal der aktuelle gcc 7.2. Aber> -std=c++1z sollte gehen.
In gcc 7.2.1. schon ;-)
In gcc-8 geht schon c++20a.
Veit D. schrieb:> Welche Version ist denn nun aktuell und stabil?
Siehe https://gcc.gnu.org/> Wenn zeitgleich eine 6.4.1 und eine 7.1.1 rauskommt, das zeugt das nicht> gerade von stabil ...
Warum nicht? Ist Windows 10 auch instabil, weil es noch Updates für
Windows 8 gibt?
Veit D. schrieb:> Wenn zeitgleich eine 6.4.1 und eine 7.1.1 rauskommt, das zeugt das nicht> gerade von stabil ...
Es zeugt davon, dass es Release-Reihen gibt, in denen ausschließlich
Probleme behoben werden und keine neuen Features, Optimierungen,
Umstrukturierungen etc., enthalten sind.
Die Ahnzahl der supporteten Release-Reihen (momentan 2 plus 1 für
aktuelle Entwicklung, d.h. 3 offene Branches) richten sich auch nach der
Anzahl der Entwickler, Tester und Release-Manager, die entsprechende
Aufgaben zu übernehmen bereit sind.
Wenn dir dieses Modell zu unsicher ist, kannst du zu einer Software
wechseln, die keinen Bugtracker hat da intrinsisch korrekt und Fehler
daher unmöglich sind.
Veit D. schrieb:> also wäre eine 6er Version stabiler, weil die nur noch Bugfix bekommt?
Die v7 bekommt auch nur noch Bugfixes.
Folge Rolfs Link. Auf der Frontseite steht für diese Zweige:
"regression fixes & docs only".
Für die v8 steht da: "Stage 3, general bugfixing". Größere neue
Features gibt es auch da nicht mehr, denn das Release der v8 ist bereits
März / April 2019 und die aktuelle Entwicklung befindet sich quasi im
"Konsolidierungsmodus". "General Development" wäre Stage I.
Außerdem wird auch im aktuellen Entwicklungszweig nicht einfach "Code
reingekloppt", sondern zu einem Approvement gehört neben Review,
ChangeLogs, Coding-Rules auch, dass es keine neuen Regressions gibt
(d.h. alle Test Suites erfolgreich absolvieren müssen), sowie Testfälle
zu Test Suite(s) hinzugefügt werden welche das neue Feature begleiten.
Mag ungewohnt sein, ist aber so.
Da v7 und v6 offene Branches sind, kann es sein, dass der HEAD eines
solchen Branches mehr enthält als die letzte offizielle Release.
Letztere findest du im SVN unter "tags". Die Unterschiede sieht du in
den relevanten ChangeLogs, in den automatisch generierten Commit-Logs
oder als Diff auf die nackten Quellen oder per Diff innerhalb des Repos,
nach Gusto SVN oder GIT.
Wichtige Änderungen sind in den jeweiligen Release-Notes ausgetextet,
dito Porting-To Guides. Beide findest du, wenn du Rolfs Link und dann
"changes" folgst.
Zu diesen Änderungen kommen noch diejenigen hinzu, die dein Distrubutor
oder dein Personal Toolchain Support Service für dich vorgenommen hat.
Hallo,
ich wußte gar nicht was alles dahinter steht. Wahnsinn. Ändern tut bei
mir und für mich niemand etwas. Ich programmiere rein für mich privat.
Danke für die vielen Infos.
Johann L. schrieb:> Veit D. schrieb:>> also wäre eine 6er Version stabiler, weil die nur noch Bugfix bekommt?>> Die v7 bekommt auch nur noch Bugfixes.
...und von der v5 gab es erst vor wenigen Wochen die letzte Release,
d.h. der v5 Reklease-Zweig Support wurde damit eingestellt.
Damit hast du die Wahl zwischen 3 aktuellen Release-Serien einer
wohlgemerkt freien Toolchain, die jeweils seit 1 Jahr, 2 Jahren bzw. 3
Jahren im Bugfix-only Mode sind.
Hallo,
hab das mit der 7er mal ausprobiert nach der Anleitung von oben:
Package Name und Package Base Path in AtmelStudio eintragen
***********************************************************
SolutionExplorer | Project: rechte Maustaste: Propreties | Advanced |
Link: Tools>Options>Toolchain>FlavourConfiguration |
Atmel-8Bit-CPP-language | Package Name und Package Base Path eintragen.
Package in AtmelStudio auswählen
********************************
SolutionExplorer | Project: rechte Maustaste: Propreties | Advanced |
Toolchain Flavour | neue Toolchain auswählen.
egal ob ich den Pfad auf /bin verweise oder dem Ordnernamen eins
darüber, es wechselt sofort die GDB Zeile im Advanced Fenster auf
"doesn't contain GDB"
Die Kompilierung an sich ist zwar fehlerfrei, aber es tauchen solche
Zeilen auf wie
File not Found : C:\Users\devil\Documents\Atmel
Studio\avr-gcc-7.1.1_toolchain\avr-size.exe
Irgendwas ist da noch faul. Was ist falsch? Auf welchen Ordnerpfad muss
konkret verwiesen werden?
Veit D. schrieb:> File not Found : C:\Users\devil\Documents\Atmel> Studio\avr-gcc-7.1.1_toolchain\avr-size.exe
Das offensichtlichste wäre, mal zu schauen, ob diese Datei denn
existiert, bzw. wo sie dann stattdessen ist. Es fällt allerdings auf,
dass bin hier als Verzeichnis fehlt. Vielleicht macht auch das
Leerzeichen im Verzeichnisnamen Probleme. Das ist auch ein gern
genommener Kandidat.
Hallo,
die Datei avr-size.exe liegt im ersten /bin Ordner.
Habe den enpackten Ordner verschoben, sodass der Pfad ohne Leerzeichen
ist und habe ihn wieder auf /bin verwiesen. Ab jetzt wird es komisch. Er
kompiliert fehlerfrei, ich sehe in den Ausgaben keinen Hinweis das etwas
fehlt, aber die FLASH/RAM Speicherbelegung ist 0.
Projekt "ATtiny841_MAX487_029.cppproj" (Standardziele):
4
Erstellung mit der Toolsversion "14.0".
5
Das Ziel "PreBuildEvent" wurde übersprungen, da die Bedingung "false" war . ('$(PreBuildEvent)'!='') wurde als (''!='') ausgewertet.
6
Ziel "CoreBuild" in Datei "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" aus Projekt "C:\Users\Worker\Documents\Atmel Studio\7.0\WorkSpace_ATtiny841\ATtiny841_MAX487_029\ATtiny841_MAX487_029\ATtiny841_MAX487_029.cppproj" (Ziel "Build" ist davon abhängig):
Aufgabenparameter:ToolchainSettings=<AvrGccCpp xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><avrgcc.common.Device>-mmcu=attiny841 -B "$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\gcc\dev\attiny841"</avrgcc.common.Device><avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex><avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss><avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep><avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec><avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures><avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned><avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned><avrgcc.compiler.symbols.DefSymbols><ListValues><Value>F_CPU=8000000UL</Value><Value>NDEBUG</Value></ListValues></avrgcc.compiler.symbols.DefSymbols><avrgcc.compiler.directories.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcc.compiler.directories.IncludePaths><avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level><avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers><avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum><avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings><avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned><avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned><avrgcccpp.compiler.symbols.DefSymbols><ListValues><Value>F_CPU=8000000UL</Value><Value>NDEBUG</Value></ListValues></avrgcccpp.compiler.symbols.DefSymbols><avrgcccpp.compiler.directories.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcccpp.compiler.directories.IncludePaths><avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level><avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers><avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum><avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings><avrgcccpp.compiler.miscellaneous.OtherFlags>-std=c++11</avrgcccpp.compiler.miscellaneous.OtherFlags><avrgcccpp.linker.libraries.Libraries><ListValues><Value>libm</Value></ListValues></avrgcccpp.linker.libraries.Libraries><avrgcccpp.assembler.general.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcccpp.assembler.general.IncludePaths></AvrGccCpp>
Aufgabenparameter:ToolchainSettings=<AvrGccCpp xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><avrgcc.common.Device>-mmcu=attiny841 -B "$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\gcc\dev\attiny841"</avrgcc.common.Device><avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex><avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss><avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep><avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec><avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures><avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned><avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned><avrgcc.compiler.symbols.DefSymbols><ListValues><Value>F_CPU=8000000UL</Value><Value>NDEBUG</Value></ListValues></avrgcc.compiler.symbols.DefSymbols><avrgcc.compiler.directories.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcc.compiler.directories.IncludePaths><avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level><avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers><avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum><avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings><avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultCharTypeUnsigned><avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcccpp.compiler.general.ChangeDefaultBitFieldUnsigned><avrgcccpp.compiler.symbols.DefSymbols><ListValues><Value>F_CPU=8000000UL</Value><Value>NDEBUG</Value></ListValues></avrgcccpp.compiler.symbols.DefSymbols><avrgcccpp.compiler.directories.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcccpp.compiler.directories.IncludePaths><avrgcccpp.compiler.optimization.level>Optimize for size (-Os)</avrgcccpp.compiler.optimization.level><avrgcccpp.compiler.optimization.PackStructureMembers>True</avrgcccpp.compiler.optimization.PackStructureMembers><avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcccpp.compiler.optimization.AllocateBytesNeededForEnum><avrgcccpp.compiler.warnings.AllWarnings>True</avrgcccpp.compiler.warnings.AllWarnings><avrgcccpp.compiler.miscellaneous.OtherFlags>-std=c++11</avrgcccpp.compiler.miscellaneous.OtherFlags><avrgcccpp.linker.libraries.Libraries><ListValues><Value>libm</Value></ListValues></avrgcccpp.linker.libraries.Libraries><avrgcccpp.assembler.general.IncludePaths><ListValues><Value>$(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include</Value></ListValues></avrgcccpp.assembler.general.IncludePaths></AvrGccCpp>
54
Program Memory Usage : 0 bytes 0,0 % Full
55
Data Memory Usage : 0 bytes 0,0 % Full
56
Ausführen der RunOutputFileVerifyTask-Aufgabe beendet.
57
Die Erstellung des Ziels "CoreBuild" im Projekt "ATtiny841_MAX487_029.cppproj" ist abgeschlossen.
58
Das Ziel "PostBuildEvent" wurde übersprungen, da die Bedingung "false" war . ('$(PostBuildEvent)' != '') wurde als ('' != '') ausgewertet.
59
Ziel "Build" in Datei "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Avr.common.targets" aus Projekt "C:\Users\Worker\Documents\Atmel Studio\7.0\WorkSpace_ATtiny841\ATtiny841_MAX487_029\ATtiny841_MAX487_029\ATtiny841_MAX487_029.cppproj" (Einstiegspunkt):
60
Die Erstellung des Ziels "Build" im Projekt "ATtiny841_MAX487_029.cppproj" ist abgeschlossen.
61
Erstellen des Projekts ATtiny841_MAX487_029.cppproj beendet.