Forum: PC-Programmierung c programmierung in visual studio


von Txiomix (Gast)


Lesenswert?

Nach langem Suchen wäre ich sehr dankbar, wenn mir jemand erklären 
könnte warum mein visual studio ohne das Einbinden von Headerdateien 
auskommt.

Ich erstelle eine main.c mit der main-Funktion und binde die Header der 
bla.c nicht ein. Trotzdem erkennt die main-Funktion die Funktion in der 
bla.c!

Wieso?

von Michael B. (laberkopp)


Lesenswert?

Erkennnen schon, aber wohl warnen bei Verwendung daß die Deklaration 
fehlt.

von Txiomix (Gast)


Lesenswert?

Er warnt nicht und führt meine Funktino f aus bla.c einfach aus, als ob 
die Funktion von vornherein der main-Funktion bekannt wäre. Da ich ein 
Bespiel für die Nutzung von Headerdateien vorbereite ist es sehr 
unpraktisch, dass die main.c keine header von mir benötigt!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Zeig Deinen vollständigen Quelltext, und zeige auch Deine Projektdatei 
(*.vcxproj).

Der C-Compiler, den MS mit Visual Studio ausliefert, verhält sich 
üblicherweise nicht so, wie Du es beschreibst. Da stimmt also was nicht.

von Rolf M. (rmagnus)


Lesenswert?

In C können Funktionen auch aufgerufen werden, die nicht vorher 
deklariert sind. Der Compiler deklariert sie dann implizit beim Aufruf. 
Eine Warnung ist aber eigentlich üblich.

von Txiomix (Gast)


Lesenswert?

main.c
------------------------------
#include<stdio.h>
//#include"func.h"


int main() {

  f();


  return(0);

}



func.c
------------------------------
//#include "func.h"
#include <stdlib.h>
#include <stdio.h>

void f() {

  printf("function f \n");

};



func.h
------------------------------
void f();

------------------------------
------------------------------


ich möchte bzw. dachte ich immer, dass wenn ich in der main.c die func.h 
nicht einbinde, die Funktion f() der main-Funktion nicht bekannt ist. 
Doch es läuft alles und die main.c gibt mir die printf in f aus! was 
verstehe ich falsch? oder läuft etwas falsch?

von Michael B. (laberkopp)


Lesenswert?

Txiomix schrieb:
> dachte ich immer, dass wenn ich in der main.c die func.h
> nicht einbinde, die Funktion f() der main-Funktion nicht bekannt ist.

Falsch.
Dem Compiler ist sie nicht bekannt, er kann sie also nicht prüfen,
aber dem Linker ist sie sehr wohl bekannt, er wird sie aufrufen.

> Doch es läuft alles und die main.c gibt mir die printf in f aus! was
> verstehe ich falsch? oder läuft etwas falsch?

Du findest offenkundig das Fenster mit den Compilerwarnungen nicht.

von Txiomix (Gast)


Lesenswert?

ok, danke Michael
jetzt sehe ich folgendes
--------------------------------------------------------------------
Schweregrad  Code  Beschreibung  Projekt  Datei  Zeile 
Unterdrückungszustand
Warnung  C4013  "f" undefiniert; Annahme: extern mit Rückgabetyp int 
HeaderTest  c:\users\xeox\documents\visual studio 
2017\projects\headertest\headertest\main.c  7
--------------------------------------------------------------------

doch, dass er es ausführt ist normal?
ich dachte immer, er kann es ohne die header garnicht ausführen.

ich bekomme es also mit visual studio nicht so hin, dass es dem Linker 
auch nicht bekannt wird und man zeigen kann, dass es ohne der header 
nicht läuft?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Txiomix schrieb:
> dass es ohne der header nicht läuft?

Setz es als C++-Projekt auf.  Da ist eine nicht deklarierte Funktion
ein Fehler.  In C ist es zwar "deprecated", aber aus historischen
Gründen zulässig.

von Txiomix (Gast)


Lesenswert?

Vielen Dank an alle :)

von Peter II (Gast)


Lesenswert?

Txiomix schrieb:
> ich bekomme es also mit visual studio nicht so hin, dass es dem Linker
> auch nicht bekannt wird und man zeigen kann, dass es ohne der header
> nicht läuft?

doch. einfach jeder Warnung als Fehler behandeln.

Optionen "Threat Warning As Errors" auf Yes setzen, keine Ahnung wie sie 
es in Deutsch genannt haben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> Threat Warning As Errors

Treat. Ohne "h". Sonst ist es eine Bedrohung.

> keine Ahnung wie sie es in Deutsch genannt haben

Es gibt verdammt viele Gründe, keine deutschsprachige Variante des 
Visual Studio zu verwenden, die eingedeutschten Fehlermeldungen und 
Compilereinstellungen sind nur einer davon.

Beitrag #5779604 wurde von einem Moderator gelöscht.
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
Noch kein Account? Hier anmelden.