Question

Je cherche à utiliser:

#define

et

#if

pour me permettre de simuler du matériel potentiellement absent pendant les tests unitaires. Quelles sont les règles d'utilisation des instructions #define ?

i.e. quelle est sa portée par défaut? puis-je changer le champ d'application de la directive?

Était-ce utile?

La solution

Comme Chris l'a dit, la portée de #define n'est que le fichier. (Il est intéressant de noter que ce n'est pas la même chose que "la classe" - si vous avez un type partiel, il peut être constitué de deux fichiers, l'un avec un symbole défini et l'autre non.

Vous pouvez également définir un symbole dans l'ensemble du projet, mais avec propriétés du projet. ou un commutateur de compilateur au lieu d'être spécifié dans le code source .

Autres conseils

De MSDN , sa portée est le fichier

Bien que vous ne puissiez pas suivre la route des objets factices, Mock.Rhinos ?

Oui, comme l'a mentionné Chris, sa portée est l'ensemble du fichier. Vous pouvez utiliser le mot clé défini n'importe où dans le fichier.

c'est-à-dire

#define something
... some code ...

et dans n’importe quelle méthode, corps de classe ou espace de nom, vous pouvez l’utiliser comme;

#if something
  ... some conditional code ...
#else
  ... otherwise ...
#endif

La portée d'une directive de préprocesseur commence lorsqu'elle est analysée à partir de la source et persiste jusqu'à indication contraire. Si vous souhaitez limiter la portée d'une directive de préprocesseur, utilisez la commande " undef " déclaration éteindre quand vous avez fini avec elle.

#include <iostream>
using namespace std ;
int main()
{
  #define someString "this is a string"
  cout<<someString<<endl;
  #undef someString  // scope of someString ends here
  cout<<someString<<endl; //this causes a compile error
  return 0 ;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top