Ich lernte C++ auf einem Mac, und vor kurzem auf Windows 7 übertragen. Ich habe die Windows v7.1 SDK heruntergeladen und das Installationsprogramm ausgeführt. Es ist die .net 4 abhängige Version des SDK, und ich habe .net 4 installiert.Compiler sagt logisch und ist undefined Bezeichner
Ich benutze die Kommandozeile, weil ich es bevorzuge, ich habe das mit dem GCC-Compiler auf dem Mac gemacht und ich bin ziemlich gut darin, wenn ich bedenke, dass ich ziemlich neu im Programmieren bin.
Ich habe die Entwicklerbefehlseingabe v7.1 sdk verwendet, weil sie die Umgebungsvariablen mithilfe der SetEnv-Batchdatei einrichtet.
Der Compiler ist offensichtlich der cl.exe-Compiler von Microsoft.
Ich lief das typische und sehr einfache Hello World-Programm, einschließlich einer getchar() am Ende, um mich das Programm tatsächlich sehen zu lassen, etwas Neues, da Mac dies nicht benötigt. Und der getchar funktionierte gut, das Programm kompiliert und lief gut.
Das Problem tauchte auf, als ich versuchte, einen Quellcode zu kompilieren, den ich auf dem Mac geschrieben hatte. Was übrigens auf dem Mac gut gelungen ist. Es fing an, einige wirklich seltsame Fehler hervorzurufen, wie zum Beispiel, dass der logische "und" Operator ein undefinierter Bezeichner ist. Nun könnte ich hier der Dumme sein, aber nach meinem Verständnis ist der Operator und ist kein Bezeichner, es ist ein Operator.
Also beschloss ich, das Problem einzugrenzen, indem ich ein sehr einfaches Programm schrieb, das eine if-Anweisung und eine else-Anweisung und den Operator 'and' verwendet und sieht, was passiert. Unten ist der Code Ich habe versucht zu kompilieren:
//hello, this is a test
#include <iostream>
int main()
{
char end;
int a = 0, b = 0;
std::cout << "If the variable a is larger than 10 and variable b is less than a, then b will be subtracted from a, else they are added.\n";
std::cout << "Enter a number for variable a\n";
std::cin >> a;
std::cout << "Now enter a number for variable b\n";
std::cin >> b;
if (a>10 and b<a) a - b;
else a+b;
std::cout << "The value of a is: " <<a;
std::cout << "Press any key to exit";
end = getchar();
return 0;
}
Und das ist der Befehl, den ich das Programm, dass diese
cl /EHsc main.cpp
Und last but not least, die Liste der Fehler zu kompilieren verwendet Programm ausgelöst, warum diese Fehler hier sind, bin ich mir nicht sicher. Es macht einfach keinen Sinn für mich.
main.cpp
error C2146: syntax error : missing ')' before identifier 'and'
error C2065: 'and' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'b'
error C2059: syntax error : ')'
error C2146: syntax error : missing ';' before identifier 'a'
warning C4552: '<' : operator has no effect; expected operator with side-effect
warning C4552: '-' : operator has no effect; expected operator with side-effect
error C2181: illegal else without matching if
warning C4552: '+' : operator has no effect; expected operator with side-effect
Jeder einzelne dieser Fehler ist seltsam. Ich habe es vorher noch nie gesehen, und ich habe nie zuvor eine Frage gestellt, weil ich immer in der Lage gewesen bin, meine Antwort ohne zu fragen zu finden, aber auf dieser einen bin ich wirklich ratlos.
'a + b' und' a-b' addieren und subtrahieren die beiden Variablen, aber nichts mit dem Ergebnis. Sie sind Anweisungen ohne Nebenwirkungen, wie das Speichern des Ergebnisses in einer Variablen oder das Übergeben an einen Funktionsaufruf, so dass sie den Programmablauf nicht beeinflussen. Tatsächlich wird Ihr Compiler sie wahrscheinlich vollständig aus dem Programm entfernen, da ihre Anwesenheit oder Abwesenheit das Programm überhaupt nicht beeinflusst. – Frxstrem
Nimm das nicht in die falsche Richtung, aber du brauchst nicht so lange, um dein Problem zu erklären. Der Informations-Rausch-Verhältnis in Ihrem Beitrag ist nicht so toll. – StoryTeller
Sie erkennen das und ist && in C++? Wenn dieser Code auf Mac kompiliert wurde, haben sie wirklich Compiler dort verdrahtet ... – anhoppe