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?
Erkennnen schon, aber wohl warnen bei Verwendung daß die Deklaration fehlt.
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!
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.
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.
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?
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.
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?
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.