Forum: PC-Programmierung c programmierung in visual studio


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Txiomix (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Erkennnen schon, aber wohl warnen bei Verwendung daß die Deklaration 
fehlt.

von Txiomix (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank an alle :)

von Peter II (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.