c - Problem med Microsoft Compiler makro ekspansion rum

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har dette problem i en header makro ekspansion under Microsoft C Compiler Preprocessor:


custom.h


.
.

# define \_OTHER\_INCLUDE\_DIR C:3rdpartyusrinclude

# define \_3RD\_PARTY\_HEADERS(headername) <\_OTHER\_INCLUDE\_DIRheadername>
.
.


Med en header test:


headertest.h


.
.

#include \_3RD\_PARTY\_HEADERS(stdint.h)
.


Microsoft C preprocessor udvider anden linje som (custom.h):


#include  <C:3rdpartyusrincludeheadername>


Hvis jeg sætter:


# define \_3RD\_PARTY\_HEADERS(headername) <\_OTHER\_INCLUDE\_DIR headername>


Resultatet er:


#include  <C:3rdpartyusrinclude stdint.h>


Hvordan kan jeg ordne det?

Bedste reference


Det ser ud til, at du vil sidestille din mappe og dit overskriftsnavn. Du bruger ## som sådan:


# define \_3RD\_PARTY\_HEADERS(headername) <\_OTHER\_INCLUDE\_DIR\##headername> 

Andre referencer 1


Er der ingen måde at få tegnsekvenserne til at blive repræsenteret forskelligt? Problemet er, at dette er en escape karakter for C og C ++. C99 siger udtrykkeligt



  Hvis tegnene ', \,',//, eller/*
  forekommer i sekvensen mellem <
  og> afgrænser, adfærd er
  undefined.



(Der er en lignende sætning for "..." inkluderer.)


og jeg forestiller mig, at for C ++ skal der være noget lignende. Så måske du bare kunne bruge / og kompilatoren ville erstatte dem internt for at henvise til den korrekte fil på dit system.

Andre referencer 2


Du ved, de fleste kompilatorer har et kommandolinjeprincip for at tilføje til den inkluderende sti ... -I eller/jeg mest sandsynligt for Microsoft One. Man gør normalt ikke hvad du gør her, aldrig noget om, hvorvidt du kan få det til at fungere.