c - Fejl: identifikator '\_S\_IFDIR' er udefineret

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lige åbnet et af mine gamle projekter i Visual Studio (Windows), der tilføjede mappetest og fundet kompileringsfejl.
Jeg har lige kopieret funktionen fra mit andet arbejdsprojekt og tilføjet de samme overskrifter.
Hvis du klikker på F12 stats.h er åbnet, og du får identifikatoren, men en eller anden måde kompilator ikke kan se det?


#include <sys/types.h>
#include <sys/stat.h>

void my\_function()
{
...
    struct \_stat buf;        
    \_wstat(dir, &buf);
    if ((buf.st\_mode & \_S\_IFDIR) > 0) { // here \_S\_IFDIR undefined
        ...
    }
}

Bedste reference


Da POSIX-symbolet er S\_ISDIR, og dit system tilsyneladende hovedsagelig følger POSIX, men tilføjer en ledende understregning, bør \_S\_IFDIR erstattes af \_S\_ISDIR (dvs. erstatte F ved S )?

Andre referencer 1


Sandsynligvis \_S\_IFDIR er mellem nogle #if check og det bliver ikke sandt.


//sys/stat.h
#ifdef SOMETHING  // <--- this needs to be true to activate below code
//...
#define \_S\_IFDIR 0
//...
#endif

Andre referencer 2


Du kan prøve ved at tilføje følgende definere:


#if defined \_\_WIN32\_\_ || defined \_WIN32 || defined \_Windows
      #if !defined S\_ISDIR
            #define S\_ISDIR(m) (((m) & \_S\_IFDIR) == \_S\_IFDIR)
      #endif
#endif