Hi, evtl kann mir ja jemand helfen. Kann mir jemand sagen, was ich umstellen muss, damit Express auch *.c Files kompiliert bzw. linkt? Ich packe meine Deklaration in ein *.h File und die Definition in ein c File. Das wird nicht gelinkt, weil er die Funktionen nicht findet. Nenne ich das c-File in ein cpp-File um, dann funktioniert alles. Es müsste ja irgendeinen Compilerschalter geben(den ich aber noch nicht gefunden habe) der das Problem löst und auch c Files statt nur cpp Files berücksichtigt werden Ich wollte einie Algorithmen auf dem PC testen, bevor ich sie im Mikrocontroller benutze. Die Mikrocontroller Entwicklungsumgebung kommt aber nicht mit cpp Files zurecht.
Du musst das C-File schon zum Projekt hinzufügen, damit es übersetzt wird. Im Projekt steht bei Dir aber offensichtlich ein C++-File, das muss da raus.
die Files sind hinzugefügt. In der Projektübersicht habe ich neben den Files aber ein C++ Icon stehen. Bei den Dateieigenschaften des C-Files kann ich aber nur "C/C++ Code" auswählen, und nicht explizit C Code.
ich habe im VS2008 für *.c und *.cpp ebenfalls dasselbe Icon. Hat mich aber bisher nie gestört (ist mir aber nie aufgefallen).
Ich habe die Dateien über "Hinzufügen -> Vorhandenes Element" dem Projekt hinzugefügt. Aber auch wenn ich ein ganz neues Element hinzufügen will, kann ich nur "C++ cpp" Dateien hinzufügen. Die Auswahl für c-Files habe ich da nirgends.
@klaus: stören tut mich das auch nicht, aber bei mir sucht er nur nach cpp Dateien und nicht nach c Dateien. Und dafür wird es doch sicherlich einen Schalter geben das er die berücksichtigt?!
A. B. schrieb: > Ich habe die Dateien über "Hinzufügen -> Vorhandenes Element" dem > Projekt hinzugefügt. > > Aber auch wenn ich ein ganz neues Element hinzufügen will, kann ich nur > "C++ cpp" Dateien hinzufügen. Die Auswahl für c-Files habe ich da > nirgends. stimmt, bei den komischen Templates ist bei mir auch kein .c dabei. Du kannst aber eine .cpp hinzufügen, und danach mit der rechten Maustaste umbenennen.
MS will dich zu dem tollen managed-Müll und .NET "überreden", die haben kein Interesse an .c. SIE wollen doch nur dein bestes, deshalb enthalten SIE dir vor, was du möchtest. SIE wissen einfach besser, daß dir C nicht gut bekommt.
... im cpp-file:
1 | extern "C"{ |
2 | #include "dein_c_header.h" |
3 | }
|
oder rechte Maus auf dein c-File -> Properties. Configuration Properties -> C/C++ -> Advanced -> Compile As: Compile As C++ code
nope, mit umbennen das funktioniert eben nicht error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""enum STATUS_t __cdecl nedap_stm(unsigned char)" (?nedap_stm@@YA?AW4STATUS_t@@E@Z)" in Funktion "_wmain". 1>C:\daten\projekte\keypad_wintest\Debug\keypad_wintest.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise. Fehlermeldungen gibt es dann.
Vielen Dank! "compile as c code" war es unter den erweiterten Einstellungen. war mir nicht aufgefallen, weil das vorher auf Standard stand. Kompilerflag ist /TC Funktioniert nun mit *.h und *.c Files
so, habe das eben probiert mit VS2008 Prof.. Neues Projekt (Konsole) angelegt namens tmp. Die tmp.cpp darin (printf() eingefügt) erst kompiliert, läuft. Im "Solution Explorer" die tmp.cpp zu tmp.c embenannt, kompiliert, läuft.
Schön... Hier läuft es aber so nicht, wenn ich die Deklaration in ein h-File und die Definition in ein C File packe. Weil er automatisch erstmal C++ annimmt und dann nach einem CPP File sucht. Ich kann es doch auch nicht ändern :)
Das hängt möglicherweise mit dem Typ des von Dir angelegten Projektes zusammen. "Er" jedenfalls sucht überhaupt nicht nach irgendwelchen Dateitypen, "Er" übersetzt das, was man ihm vorwirft.
machst du dich auf subtile art&weise darüber lustig, das ich meinen compiler als "er" bezeichne? ;)
A. B. schrieb: > machst du dich auf subtile art&weise darüber lustig, das ich meinen > compiler als "er" bezeichne? ;) Sicher nicht, sondern daß der Compiler keine Files sucht. Er nimmt das, was man ihm vorsetzt. Und der Microsft Compiler ist schlau genug ein .c File als C Code zu übersetzen und ein .cpp File als C++ Code. Es sei denn, man zwingt ihn mittels Optionen dazu sich dumm zu stellen. Du hast allerdings das eigentliche Problem noch nicht verstanden. Du hast ein .c File mit einer Funktion und ein dazu passendes .h File. Daraus erzeugt der Compiler ein globales Symbol, das dem Namen Deiner Funktion entspricht (eventuell mit vorangestelltem "_"). Jetzt versuchst Du aber diese C-Funktion aus einem .cpp File heraus aufzurufen und der Compiler geneeriert ein Symbol mit C++ Namemangling ("?nedap_stm@@YA?AW4STATUS_t@@E@Z") nach dem der Linker suchen soll. Dieses ist natürlich nicht vorhanden (sondern nur "_nedap_stm"). Der "Trick" ist jetzt, dem C++ Compiler mitzuteilen, das es sich bei der aufgerufenen Funktion um eine C-Funktion handelt. Das macht man mit dem oben bereits erwähnten extern "C" Konstrukt (Beitrag "Re: Visual C++ 2010 Express C-File kompilieren"). Entweder wie oben beim Einbinden des .h Files oder gleich direkt .h File selbst.
A. B. schrieb: > Aber auch wenn ich ein ganz neues Element hinzufügen will, kann ich nur > "C++ cpp" Dateien hinzufügen. Die Auswahl für c-Files habe ich da > nirgends. Einfach in den Templates .cpp auswählen und dann aber den Namen mitsamt der Endung .c schreiben. Geht zumindest in VS2005/2008.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.