Forum: PC-Programmierung stdio_s.h Header wird nicht gefunden in Visual Studio Code


von Michael S. (michaelsmith)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein kleines SpielTutorial ausm GitHub gezogen um mir die C++ 
Syntax genauer anzuschauen.
Kriege eine Meldung, dass eine Funktion nicht definiert ist
1
identifier "swprintf_s" is undefined
dafür brauche ich den stdio_s.h Header und dieser scheint im Verzeichnis 
drin zu sein (siehe Bild im Anhang).
Mein Visual Studio Code aber sieht dies anscheinend net...
1
stdio_s.h: No such file or directoryGCC

Kann mir jemand sagen woran es liegt ?

VG

von Harald K. (kirnbichler)


Lesenswert?

Wie sieht Dein Include-Pfad aus?

Steht da  ..mingw32/include/sec_api drin?

Wie hast Du die Datei eingebunden?

[ ] #include "stdio_s.h"
[ ] #include <stdio_s.h>
[ ] #include <sec_api/stdio_s.h>

von Michael S. (michaelsmith)


Lesenswert?

[x] #include "stdio_s.h"
[x] #include <stdio_s.h>
[x] #include <sec_api/stdio_s.h>

die ersten zwei Ansätze hatte ich ausprobiert, hatte nicht getan. Den 
dritten gerade, tut auch net.

Also habe folgende includes drin,
1
#include <iostream>
2
#include <thread>
3
#include <vector>
4
using namespace std;
5
6
#include <stdio.h>
7
#include <Windows.h>
8
#include <stdio_s.h>

alle tun ausser dem letzten, der stdio.h Header wird gefunden und 
befindet sich in dem "include" Ordner (siehe Bild), also einen Pfad 
höher zum stdio_s.h


*************** UPDATE ****************

das mit dem #include <sec_api/stdio_s.h> Ansatz hat doch geklappt, 
zumindest kriege ich jetzt keine Meldung, dass der Header nicht gefunden 
werden kann.
1. Heisst es, dass wenn ich auf irgendeinen Unterordner vom Include 
Ordner (in diesem Fall sec_api) zugreifen möchte, dass ich dann immer 
den Unterordner spezifizieren muss ?

2. Jetzt habe ich ein neues Problem, die Funktionen die ich brauche sind 
über ein Macro geklammert, MINGW_HAS_SECURE_API. Kennt jemand dieses ?
1
#ifndef _INC_STDIO_S
2
#define _INC_STDIO_S
3
4
#include <stdio.h>
5
6
#if defined(MINGW_HAS_SECURE_API)
7
8
#ifdef __cplusplus
9
extern "C" {
10
#endif
11
12
#ifndef _STDIO_S_DEFINED
13
#define _STDIO_S_DEFINED
14
  _CRTIMP errno_t __cdecl clearerr_s(FILE *_File);
15
  int __cdecl fprintf_s(FILE *_File,const char *_Format,...);

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Michael S. schrieb:
> 1. Heisst es, dass wenn ich auf irgendeinen Unterordner vom Include
> Ordner (in diesem Fall sec_api) zugreifen möchte, dass ich dann immer
> den Unterordner spezifizieren muss ?

Wenn dieser "Unterordner" nicht separat im Include-Pfad aufgeführt wird, 
ja; der Präprozessor fängt nicht an, in Unterverzeichnissen zu suchen.

Hast Du Dir den Include-Pfad für Deinen Compiler mal angesehen?

(Das ist nicht eine Verzeichnisstruktur auf Deiner Festplatte, sondern 
ein Kommandozeilenparameter, der Deinem Compiler übergeben wird; das 
kann z.B. über ein Makefile erfolgen, oder aber über irgendwelche 
Projekteinstellungen Deiner IDE)

Beitrag #7469857 wurde vom Autor gelöscht.
von Εrnst B. (ernst)


Lesenswert?

Michael S. schrieb:
> ich habe ein kleines SpielTutorial ausm GitHub gezogen um mir die C++
> Syntax genauer anzuschauen.

Und dafür nimmst du den GCC 5.1.0?
Der ist von 2015. Bei C++ hat sich seitdem einiges getan...

Außerdem schaut dein Beispielcode eher nach einem ungesunden Mischmasch 
aus C und C++ aus. Fein wenn man weiß was man tut, sehr unglücklich, 
wenn das eine Vorlage zum Erlernen nur einer der beiden Sprachen sein 
soll.

von Michael S. (michaelsmith)


Lesenswert?

Hallo Ernst, kannst du bitte kurz erläutern wie du auf 5.1.0 gekommen 
bist,
ja das Tetris Tutorial ist etwas älter, über 6 Jahre jetzt.

Kennst du vllt. ein paar zeitgemässe Beispiele, welche man sich 
anschauen könnte ?

>
> Und dafür nimmst du den GCC 5.1.0?
> Der ist von 2015. Bei C++ hat sich seitdem einiges getan...
>


VG

von Rolf M. (rmagnus)


Lesenswert?

Michael S. schrieb:
> Hallo Ernst, kannst du bitte kurz erläutern wie du auf 5.1.0 gekommen
> bist,

Steht doch in deinem Screenshot: "GCC 5.1.0 x86-64_w64-mingw32"

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.