Visual C++ 2010 Express C-File kompilieren

OP #2334408
Lesenswert?

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.
#2334439
Lesenswert?

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.
Gast #2334452
Lesenswert?

... 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
OP #2334455
Lesenswert?

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.
Gast #2335336
Lesenswert?

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.
Gast #2335347
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren