C Visual C++ 2008 Express Edition

foggy80

Lt. Commander
Registriert
Juli 2008
Beiträge
1.034
Hallo,
"Visual C++ 2008 Express Edition" eignet sich auch für das Programmieren von C, richtig? Sollte es jedenfalls. Wenn man ein neues Projekt erstellen möchte, gibt es nirgendwo die Auswahl zur Erstellung eines C-Projektes. Solang der Compiler das aber trotzdem mitmacht, sollte das eigentlich kein Problem sein, richtig?
Ich hab aber schon irgendwo gelesen, dass man dann ein paar Dinge beachten muss, damit der Compiler dann C++ von C unterscheiden kann, weiß da jemand ein bisschen mehr als ich?

Beim Compilieren der Fkt

Code:
# include <sys/types.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <dirent.h>

int ordtst (char *uordner, char *oordner) {
    char uadresse[300];
    strcpy (uadresse, oordner);
    strcat (uadresse, uordner);
    DIR *udir;
    if ((udir=opendir (uadresse)) == NULL)
        return 1;
    else {
        if (closedir (udir) == -1) {
            printf ("Fehler beim Schliessen von %s\n", uadresse);
            return 1;
        }
    }
        return 0;
}

meldet der compiler

1>gfga.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_closedir" in Funktion ""int __cdecl ordtst(char *,char *)" (?ordtst@@YAHPAD0@Z)".
1>gfga.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_opendir" in Funktion ""int __cdecl ordtst(char *,char *)" (?ordtst@@YAHPAD0@Z)".

Und ich hab keine Ahnung was er damit meint! Aber es hat sicher etwas mit diesem C-Unfreundlichen Visual C++ Compiler zu tun, stimmts?

Die "Visual C++ 2008 Express Edition" scheint sehr umfangreich zu sein und ich würde meine C-Experimente nur zu gern damit weiterführen, könnt ihr mir helfen?
Danke
foggy
 
Okay, wenns gebraucht wird, hier der gesamte Quelltext:

Code:
/* readdir */
# include <sys/types.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <dirent.h>

int ordtst (char *uordner, char *oordner) {
    char uadresse[300];
    strcpy (uadresse, oordner);
    strcat (uadresse, uordner);
    DIR *udir;
    if ((udir=opendir (uadresse)) == NULL)
        return 1;
    else {
        if (closedir (udir) == -1) {
            printf ("Fehler beim Schliessen von %s\n", uadresse);
            return 1;
        }
    }
        return 0;
}

int dirausg(char *aordner) {

    DIR *adir;

    struct dirent *dirzeiger;

    if ((adir=opendir (aordner)) == NULL) {
        fprintf (stderr, "Fehler bei opendir ...\n");
        return 1;
    }

    int b;
    for (b = 1; (dirzeiger=readdir(adir)) != NULL; b++) {
        printf ("%d.%s\n", b, (*dirzeiger).d_name);
        if (ordtst ((*dirzeiger).d_name, aordner) == 0) {
            printf ("Ist ein Ordner\n\n");
        }
        else printf ("ist KEIN Ordner\n\n");
    }

    if (closedir (adir) == -1) {
        printf ("Fehler beim Schliessen von %s\n", aordner);
        return 1;
    }
}

int count (char *cordner) {

    DIR *cdir;
    int i;


    if ((cdir=opendir (cordner)) == NULL) {
        fprintf (stderr, "Fehler bei opendir ...\n");
        return EXIT_FAILURE;
    }

    for (i=0;  (readdir (cdir)) != NULL; i++);

    printf("%d\n", i);

    if (closedir (cdir) == -1)
        printf ("Fehler beim Schließen von %s\n", cordner);
}


int main () {

    char ordner[512];

    scanf ("%s", ordner);
    fflush (stdin);

    dirausg(ordner);

    count(ordner);

	//int a;
    //scanf ("%d", &a);

    return 0;
}
 
Zuletzt bearbeitet:
Bei mir fehlte die dirent.h nicht, da ich sie bereits aus der MinGW library rauskopiert hatte, sonst würden da noch weitere Fehlermeldungen vom Compiler ausgespuckt werden.
Jetzt hab ich es mal mit der dirent.h probiert die du gelinkt hast (weil diese etwas anders zu sein scheint als die dirent.h von minGW) und es werden noch immer dieselben fehler angezeigt.
 
Zuletzt bearbeitet:
Da fehlt ne lib, welche kann ich dir aber nicht sagen, wenn du die gefunden hast, einfach mit
#pragma comment (lib,"name.lib") einbinden, dann sollte es gehen.

Du kannst eine C-Compilierung entweder in der Porjekteinstellung oder durch den Dateinamen erzwingen.
Einfach die Datei in .c umbenennen und schon wird diese mit C-Standards kompiliert.
 
So wie ich das sehe, meldet dir nicht der Compiler einen Fehler sondern der Linker.
Und mit dem
Code:
# include <lib.h>

includest du den Header der Bibliothek aber du linkst nicht gegen die Bibliothek.

Ach ja,
die zusätzlichen Abhängigkeiten von Bibliotken kannst du in den Projekteigenschaften einstellen
 
Zuletzt bearbeitet:
Der Compiler von MSVC ist keineswegs C-unfreundlich. Wer bringt nur solche Sachen in die Welt?

Man kann für alle im Projekt befindlichen Quelldateien einstellen, ob diese als C oder C++ Code kompiliert werden sollen!
-Projektmappen-Explorer
-Quelldateien
-Rechtsklick, dann Eigenschaften
-Konfigurationseinstellungen
-C/C++
-Erweitert
-Kompilierungsart: Als C-Code kompilieren (/TC)

Mal ganz abgesehen davon, dass der dargestellte Linkerfehler rein gar nichts damit zu tun hat!

Wie schon geschrieben wurde, liegt das Problem beim Linker und nicht beim Compiler - eine Abhängigkeit konnte nicht aufgelöst werden. Also: Library finden und bei der Linker-Eingabe (Projektoptionen) mit aufnehmen.
 
Der Compiler von MSVC ist keineswegs C-unfreundlich. Wer bringt nur solche Sachen in die Welt?
Ich! Oder heißt das Programm etwa Visual C 2008 Express Edition? Nöööö!

Das mit dem Linker (mein schlaues Buch, das über 1200 Seiten geht, hat das Wort nie benutzt) versteh ich nicht ganz. Ich kann zwar zusätzliche Bibliotheken in das Projekt mit einbinden, aber welche denn? Die Standardlib wird es wohl nicht sein, weil mein Compiler header wie stdio.h und stdlib.h ja findet und einbindet.

Inzwischen sind es schon eine Menge mehr Fehlermeldungen...und ich hab garnichts an den Programm- oder Projekteinstellungen geändert, außer dass ich die Quelldatei von *.cpp in *.c umbenannt habe, aber wenn ich das Rückgängig mache ändert das trotzdem nichts an der Fehlermeldung.

1>------ Erstellen gestartet: Projekt: First, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>readdir.c
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(10) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\string.h(74): Siehe Deklaration von 'strcpy'
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(11) : warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\string.h(79): Siehe Deklaration von 'strcat'
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(12) : error C2275: 'DIR': Ungültige Verwendung dieses Typs als Ausdruck
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\dirent.h(85): Siehe Deklaration von 'DIR'
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(12) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(13) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(13) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'int' und 'DIR *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(13) : warning C4047: '==': Anzahl der Dereferenzierungen bei 'int' und 'void *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(16) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(16) : warning C4047: 'Funktion': Anzahl der Dereferenzierungen bei 'DIR *' und 'int' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(16) : warning C4024: 'closedir': Unterschiedliche Typen für formalen und übergebenen Parameter 1
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(35) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(36) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(36) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\ggsag\ggsag\readdir.c(37) : error C2065: 'b': nichtdeklarierter Bezeichner
1>Das Buildprotokoll wurde unter "file://c:\Users\user\Documents\Visual Studio 2008\Projects\ggsag\ggsag\Debug\BuildLog.htm" gespeichert.
1>First - 8 Fehler, 6 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Dann ist das Programm eben Anfängerfeindlich, mir egal.

Was die ganze Sache extrem nebulös macht: Gestern Abend lief der Debugger ohne Fehlermeldungen und das Programm lief sogar, die oben genannten Meldungen kamen dann nur wenn ich anstatt Debug Release ausgewählt hab, aber heute morgen kommen die Fehlermeldungen jetzt wieder auch bei Debug.

EDIT:
Hab jetzt ein jungfräuliches Projekt angelegt und den Quelltext reinkopiert, die Fehlermeldung ist wieder eine andere:
1>------ Erstellen gestartet: Projekt: Test2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>1.c
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(14) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : error C2065: 'dirzeiger': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'int' und 'dirent *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : warning C4047: '!=': Anzahl der Dereferenzierungen bei 'int' und 'void *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(16) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(16) : error C2065: 'dirzeiger': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(16) : error C2100: Ungültige Dereferenzierung.
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(16) : error C2224: Der linke Teil von '.d_name' muss eine Struktur/Union sein
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(17) : warning C4013: 'ordtst' undefiniert; Annahme: extern mit Rückgabetyp int
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(17) : error C2065: 'dirzeiger': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(17) : error C2100: Ungültige Dereferenzierung.
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(17) : error C2224: Der linke Teil von '.d_name' muss eine Struktur/Union sein
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(30) : error C2275: 'DIR': Ungültige Verwendung dieses Typs als Ausdruck
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\dirent.h(85): Siehe Deklaration von 'DIR'
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(30) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(31) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(31) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'int' und 'DIR *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(31) : warning C4047: '==': Anzahl der Dereferenzierungen bei 'int' und 'void *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(76) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(77) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(77) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(78) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(91) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(92) : error C2065: 'a': nichtdeklarierter Bezeichner
1>Das Buildprotokoll wurde unter "file://c:\Users\user\Documents\Visual Studio 2008\Projects\Test2\Test2\Debug\BuildLog.htm" gespeichert.
1>Test2 - 20 Fehler, 5 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
 
Zuletzt bearbeitet:
1.
Das mit dem Linker (mein schlaues Buch, das über 1200 Seiten geht, hat das Wort nie benutzt) versteh ich nicht ganz. Ich kann zwar zusätzliche Bibliotheken in das Projekt mit einbinden, aber welche denn? Die Standardlib wird es wohl nicht sein, weil mein Compiler header wie stdio.h und stdlib.h ja findet und einbindet.

Die Bibliothek, in der closedir und opendir implementiert sind.
Wenn ich mir aber folgendes durchlese, denke ich dass du da tatsächlich ein Problem hast:
http://openbook.galileocomputing.de/c_von_a_bis_z/017_c_dateien_verzeichnisse_003.htm#mjc31cd7e93db31d7407d32cd062032c36
(ist übrigens der erste Treffer wenn man nach "closedir windows c" googelt...)

2.
Hab jetzt ein jungfräuliches Projekt angelegt und den Quelltext reinkopiert, die Fehlermeldung ist wieder eine andere:
So wie ich das sehe ist aber auch der Quelltext ein anderer...
 
gluehwurm schrieb:
1.
Das mit dem Linker (mein schlaues Buch, das über 1200 Seiten geht, hat das Wort nie benutzt) versteh ich nicht ganz. Ich kann zwar zusätzliche Bibliotheken in das Projekt mit einbinden, aber welche denn? Die Standardlib wird es wohl nicht sein, weil mein Compiler header wie stdio.h und stdlib.h ja findet und einbindet.

Die Bibliothek, in der closedir und opendir implementiert sind.
Wenn ich mir aber folgendes durchlese, denke ich dass du da tatsächlich ein Problem hast:
http://openbook.galileocomputing.de/...d32cd062032c36
(ist übrigens der erste Treffer wenn man nach "closedir windows c" googelt...)

Genau DIESES Buch hab ich auch...höh...wer hätt's gedacht. Aber in der 2. Auflage. Umso peinlicher, dass ich das
Hinweis

Die folgenden Funktionen sind leider nicht mit dem Microsoft Visual-C++-Compiler ausführbar. Dafür wird aber am Ende des Kapitels ein extra Listing angefertigt, das zeigt, wie auch mit dem Visual-C++-Compiler Programme erstellt werden können, die ein Verzeichnis auslesen.
nicht mehr weiß. Das macht dich, Gluehwurm, sowas wie für einen Gott für mich. In Zukunft schreibe ich dir gleich eine persönliche Nachricht wenn ich Hilfe brauche xD. Ne Spaß.

gluehwurm schrieb:
2.

So wie ich das sehe ist aber auch der quelltext ein anderer...
Wirklich? Oh...dann sei diese Tatsache ein Hinweis darauf, dass ich wirklich eure Hilfe brauche =)
Nichtsdestotrotz wird es uns allen hier im Raum ein Rätsel sein, wieso das Programm gestern Abend gelaufen ist.
 
Zuletzt bearbeitet:
Also, dann poste doch mal deinen Quelltext.

Ich denke, dass du einen anderen Quelltext verwendest, da der Compilerfehler
1>------ Erstellen gestartet: Projekt: Test2, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>1.c
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(14) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\test2\test2\1.c(15) : error C2065: 'dirzeiger': nichtdeklarierter Bezeichner
nicht zu deinem Quelltext passt: Ich finde in in Zeile 15 weder ein 'b' noch einen 'dirzeiger'...


Btw:
Du verwendest in deinem Code
Das kannst du gleich sein lassen, denn ein flush auf einen Eingabestrom ist schlichtweg nicht definiert.
 
Der Compiler von MSVC ist keineswegs C-unfreundlich. Wer bringt nur solche Sachen in die Welt?
Ich! Oder heißt das Programm etwa Visual C 2008 Express Edition? Nöööö!
Heißt also: nur weil es nicht "Visual C 2008 Express Edition" heißt, ist der Compiler nicht in der Lage C-Sourcen zu übersetzen!? Das wollen wir mal lieber nicht so stehen lassen - Visual C++ 200x (ob Express Edition oder nicht) ist definitiv in der Lage, C-Quelltexte zu übersetzen und fehlerfrei zu Verknüpfen.


Die Linkerfehler aus Deinem ersten Post könnten dadurch erzeugt worden sein, dass der C-Compiler eine andere Namenskonvention für Symbole im Kompilat benutzt. Also: in C statt C++ kompilieren.


Compilerfehler (z.B. C2065) entstehen immer dann, wenn der Programmierer nicht dafür gesorgt hat, dass die Syntax in sich stimmig ist (Semikolon am Ende der Zeile, Anzahl schließender Klammern=Anzahl öffnende Klammern) oder alle Symbole (Funktionen und Variablen) vor ihrer Benutzung auch deklariert worden sind.
Fehlt beispielsweise eine Include-Datei kommt es dazu, dass Datentyp- oder Symboldeklarationen fehlen, somit sind alle folgenden Deklarationen ungültig (in C kann u.U. noch ein implizites 'int' als Datentyp angenommen werden) und führen zu weiteren Fehlermeldungen.

Letzten Endes muss ich Dir leider mitteilen, dass Fehlermeldungen beim Kompilieren oder Verknüpfen immer auf Fehler des Programmierers zurückzuführen sind.

Was die ganze Sache extrem nebulös macht: Gestern Abend lief der Debugger ohne Fehlermeldungen und das Programm lief sogar, die oben genannten Meldungen kamen dann nur wenn ich anstatt Debug Release ausgewählt hab, aber heute morgen kommen die Fehlermeldungen jetzt wieder auch bei Debug.
Das liegt vermutlich daran, dass Release und Debug unterschiedliche Konfigurationen sind und das Umstellen der Konfigurationen nach Änderungen am Quelltext auch neue Kompilate erzeugt. Dass dann neue Warnungen kommen, ist logisch: der Quelltext muss ja neu übersetzt werden.
Nur wenn den Objektdateien zugrundeliegenden Quelltexte sich nicht geändert haben, müssen diese auch nicht neu kompiliert werden. Wenn nicht einmal Objektdateien existieren, MUSS der Quelltext natürlich erst einmal übersetzt werden.

Übrigens: der Debugger erzeugt nur Fehlermeldungen zur Laufzeit, Compiler und Linker zur Entwicklungszeit/Übersetzungszeit.
 
Deine Compilerfehler entstehen, weil du die Variabeln nicht alle am Anfang eines Blocks ({..}) definierst, da verhält sich der C-Modus des VC-Compilers strikter als z.B: der GCC.
Und die Warnungen kannst du ausschalten indem du an die Funktion einfach _s anhängst (also strcat_s(...);), allerdings ist dann der Syntax anders, weil man die Puffergröße explizit angeben muss.
 
@ Gluehwurm: War mir sowieso unsicher was das fflush soll, ich werde dann mal nach einer guten Alternative suchen, wenn ich es überhaupt dann noch brauche.

@ XunnD: Die meisten Fehler haben ihre Quelle in der Tatsache, dass, wie schon gesagt, die dirent.h vom ms-vc Compiler nicht verstanden wird. Unter Code::Blocks ist der Quelltext, so wie er unten an meinem Post steht, Fehlerfrei. Dazu kommt noch:

@Blitzmerker: Was soll das denn bringen die Variablen am Anfang eines Blocks zu definieren? Aber gut zu wissen, danke =)

So, jetzt nochmal der Fehlerhafte Quelltext mit dem dazugehörigen Fehlerprotokoll:
Code:
/* readdir */
# include <sys/types.h>
# include <dirent.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>

dirausg(char *aordner) {

    DIR *adir;

    struct dirent *dirzeiger;

    if ((adir=opendir (aordner)) == NULL) {
        fprintf (stderr, "Fehler bei opendir ...\n");
        return 1;
    }

    int b;
    for (b = 1; (dirzeiger=readdir(adir)) != NULL; b++) {
        printf ("%d.%s\n", b, (*dirzeiger).d_name);
        if (ordtst ((*dirzeiger).d_name, aordner) == 0) {
           printf ("Ist ein Ordner\n\n");
        }
        else printf ("ist KEIN Ordner\n\n");
    }

    if (closedir (adir) == -1) {
        printf ("Fehler beim Schliessen von %s\n", aordner);
        return 1;
    }
}

int ordtst (char *uordner, char *oordner) {
    char uadresse[300];
    strcpy (uadresse, oordner);
    strcat (uadresse, uordner);
    DIR *udir;
    if ((udir=opendir (uadresse)) == NULL)
        return 1;
    else {
        if (closedir (udir) == -1) {
            printf ("Fehler beim Schliessen von %s\n", uadresse);
            return 1;
        }
    }

        return 0;
}

count (char *cordner) {

    DIR *cdir;
    int i;


    if ((cdir=opendir (cordner)) == NULL) {
        fprintf (stderr, "Fehler bei opendir ...\n");
        return EXIT_FAILURE;
    }

    for (i=0;  (readdir (cdir)) != NULL; i++);

    printf("%d\n", i);

    if (closedir (cdir) == -1)
        printf ("Fehler beim Schließen von %s\n", cordner);
}


int main () {

    char ordner[512];

    scanf ("%s", ordner);
    fflush (stdin);

    dirausg(ordner);

    count(ordner);

    //int a;
    //scanf ("%d", &a);

    return 0;
}

1>------ Erstellen gestartet: Projekt: fb, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>fb.c
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(19) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(20) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(20) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(21) : error C2065: 'b': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(22) : warning C4013: 'ordtst' undefiniert; Annahme: extern mit Rückgabetyp int
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(38) : error C2275: 'DIR': Ungültige Verwendung dieses Typs als Ausdruck
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\dirent.h(85): Siehe Deklaration von 'DIR'
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(38) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(39) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(39) : warning C4047: '=': Anzahl der Dereferenzierungen bei 'int' und 'DIR *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(39) : warning C4047: '==': Anzahl der Dereferenzierungen bei 'int' und 'void *' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(42) : error C2065: 'udir': nichtdeklarierter Bezeichner
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(42) : warning C4047: 'Funktion': Anzahl der Dereferenzierungen bei 'DIR *' und 'int' unterschiedlich
1>c:\users\user\documents\visual studio 2008\projects\fb\fb\fb.c(42) : warning C4024: 'closedir': Unterschiedliche Typen für formalen und übergebenen Parameter 1
1>Das Buildprotokoll wurde unter "file://c:\Users\user\Documents\Visual Studio 2008\Projects\fb\fb\Debug\BuildLog.htm" gespeichert.
1>fb - 8 Fehler, 5 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

...falls es noch jemanden interessiert. Irgendwann demnächst werde ich dann die besprochenen Fehler korrigieren.
 
error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
Das ist der Fehler, wenn man Variabeln nicht am Anfang definiert.
Es ist in ISO C festgelegt, dass man alle Variabeln am Anfang eines {}-Blocks festlegen muss.
Erst mit C++ durfte man die Variabeln überall anlegen. (Der GCC hält sich nicht daran, er kompiliert einfach wie als wäre es C++, da ist der VC-Compiler hat strenger (eine der wenigen Ausnahmen, bei denen sich Microsoft an die Standards hält, wo es die anderen nicht tun.))

Ahh und noch was, der Compiler kennt deine Funktion ordtst nicht, weil du sie erst weiter unten definierst.
-> Funktion oben deklarieren ( int ordtst (char *, char *); )
 

Ähnliche Themen

Zurück
Oben