Frage

Bei mehreren Compilern ich verwendet habe (alle gcc aber verschiedene Versionen) Ich habe ein C99 mode Fehler für Dinge wie int i in der for-Schleife Ausdruck deklarieren statt, bevor es (wenn ich nicht die std=c99 Option). Nach dem Lesen hier ich, dass die gcc Optionen -ansi verstehen, -std=c89 und -std=iso9899:1990 alle auf den ANSI-C-Standard zu bewerten, , aber ich verstehe nicht, warum / wenn ich den c89 Standard im Vergleich zu einem neueren Standard wie c99 holen sollte (was die neueste ist nehme ich an).

Auch ich sehe mehrere Versionen der iso Typs Standards für die C-Sprache, von denen die ersten (aus meinem Verständnis) eine direkte Anschluss der ANSI-Standards ist. Sie ist sicher, dass iso zu sagen, ihren Standard für C aktualisieren, aber der ursprüngliche ANSI-Standard für C wird immer das gleiche sein?

Bonus Frage:

Ich kann wirklich diese heraus mir Figur, ich habe einfach nicht die Zeit genommen, es noch zu tun, also wenn jemand weiß, die Oberseite des Kopfes ab dann so toll ist, sonst kein großes Problem, ich werde es herausfinden später:)

habe ich einen ziemlich neuen Druck des Buch The C Programming Language (ANSI). Mein Buch zeigt immer für Schleifen wie folgt aus:

int i;

for(i = 0; i < foo; i++)

aber viele Menschen (von denen die meisten haben mehr Talent Programmierung in ihrem kleinen Finger) schreiben ihre for-Schleifen wie folgt aus:

(int i = 0; i < foo; i++)

Ist es zu sagen, zu korrigieren, wenn ich die Schleife die erste Art und Weise schreiben dann i auf die gesamte Funktion zugänglich sein sollte, aber wenn ich es die zweite Art und Weise schreiben dann i ist nur für die for-Schleife UNABHÄNGIG von dem, was mit Standard-I kompilieren? Eine andere Möglichkeit, diese gleiche Frage zu stellen, wenn ich mit dem c89 Standard wird die i sowohl für Schleifen zugänglich sein für die gesamte Funktion kompilieren und wenn ich mit dem c99 Standard kompilieren wird die i der ersten for-Schleife auf die gesamte Funktion zugänglich sein während der i der zweiten for-Schleife werden nur durch die for-Schleife zugänglich sein?

War es hilfreich?

Lösung

Ich verstehe nicht, warum / wenn ich soll wählt den C89-Standard im Vergleich zu einem neueren Standard wie C99 (das ist der neueste Ich gehe davon aus).

Ein paar Gründe:

1) gcc C99-Unterstützung ist nicht ganz vollständig, während seine C89-Unterstützung ist. Deshalb C89 (mit GNU-Erweiterungen) ist die Standardeinstellung. Wenn Sie also einen absoluten Pedant sind für die Programmierung zu einem Standard-gcc verwenden, wählt C89.

2) Microsofts Compiler unterstützt nicht wirklich C99 überhaupt. Also, wenn Sie portable C-Code schreiben möchten, C89 ist ein verbreiteter Standard.

ist sicher, dass iso zu sagen aktualisiert ihr Standard für C, aber das Original ANSI-Standard für C wird immer die gleich?

Nein, wurde ISO C99 auch als ANSI-Standard ratifiziert. Der Name „ansi“ nur an C89 gebunden wird, ist ein unglücklicher historischer Zufall. Das sei gesagt, C89 wird immer C89 sein, es ist nur nicht der neueste ANSI-C-Standard.

Ist es richtig zu sagen, wenn ich das schreiben Schleife der erste Weg dann sollte ich zugänglich für die gesamte Funktion, sondern wenn ich es die zweite Art und Weise schreiben dann i nur zugänglich für die for-Schleife Unabhängig davon, was Standard-I Kompilierung mit?

Sie können nicht den zweiten Weg in C89 schreiben (das heißt mit -pedantic den Standard zu halten), so gibt es keine „unabhängig davon, was Standard“. Die Versionen von C mit GNU-Erweiterungen sind nicht Standards, sie sind „Dialekte“ (zumindest das ist, was der Mann Seite nennt). In C89 ist die zweite Schleife in C99 nicht legal, begrenzt die zweiten den Umfang i an die Schleife. Offensichtlich in beiden Fällen gibt die erste Schleife ein breiteres Spektrum i.

In der Tat, gcc nicht wie die zweite Schleife in C89 auch mit GNU-Erweiterungen aktiviert.

Andere Tipps

C wurde als C89 von ANSI standardisiert. Es wurde dann von der ISO als C90 standardisiert; gibt es keine technischen Unterschiede zwischen C89 und C90.

C99 ist eine Überarbeitung des C-Standard; es wurde von der ISO C Komitee entwickelt und sowohl von ISO und ANSI standardisiert. Sowohl C89 und C99 sind ANSI-Standards. Im allgemeinen Sprachgebrauch bezieht sich der Ausdruck „ANSI C“ in der Regel auf C89; der K & R 2nd ed. Bucheinbände nur C89, C99 nicht.

Warum würden Sie wählen eine alte Version von C benutzen? Nun, es gibt mindestens zwei Gründe. Erstens kann man einen Compiler, die nicht C99 unterstützt (zB Microsoft Visual C ++ unterstützt nur C89). Zweitens gibt es eine Menge von Legacy-Code gibt, die Verwendungen Dinge von C89, die nicht in C99 ist erlaubt (Sie mehr unter der Frage sehen ;., dass auch Links zu dem C99 Begründung Dokument, das die Unterschiede beschrieben)

Wie für die "Bonus-Frage:" Sie können eine Variable in einer for-Anweisung in C89 erklären; Sie können in C99. In C89, dem ersten Teil einer for-Anweisung ist ein Ausdruck.

Ich habe kein eingehendes explaination für die C-Normen haben.

Aber meine Standard-Haltung wurde C99 zu verwenden, wenn die Chance gegeben. Die Tatsache, dass es war der neu entwickelte Standard ist ein Grund (ich eine falsch verstandenen habe, dass „neuere ist besser“).

Der Hauptgrund ist, so dass ich Variablen in for-Schleifen erklären kann.

C99 gilt:

for (int i = 0; i < 100; i++)
{
   doSomething();
}

C89, ANSI und älter:

int i;
for (i = 0; i < 100; i++)
{
   doSomething();
}

Die C99 Implementierung von gcc ist noch nicht abgeschlossen, aber ziemlich benutzbar im täglichen Leben Programmierer. Ich habe nicht die Referenz bei der Hand, aber für gcc gibt es eine Aussage irgendwo, dass sie zu C99 wechseln (oder nur zu ihrem Dialekt gnu99) den Tag, dass diese Umsetzung beendet angesehen wird.

Die Frage C99 die Verwendung gehört oder nicht, wird in einem pragmatischen Teil unterteilt:

  • für welche Plattformen Ich muss kompilieren meinen Code
  • , welche Funktionen würde ich (für meinen Geschmack viel Reinheit und Leichtigkeit tragbar zu programmieren) gewinnen

und ein emotionaler / ideologischer Teil. Für die später gibt es keine Heilung, aber die Anwendung des Dinosaurier-Prinzip.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top