Frage

Ich bin auf der Suche zu verwenden:

#define

und

#if

mir zu erlauben, möglicherweise fehlt Hardware während Komponententests zu simulieren. Was sind die Regeln für die #define-Anweisungen?

d. was ist ihr Standardbereich? kann ich den Anwendungsbereich der Richtlinie ändern?

War es hilfreich?

Lösung

Als Chris sagte, der Umfang der #define ist nur die Datei. (Es ist erwähnenswert, dass dies nicht die gleiche wie „Klasse!“ - wenn Sie einen Teil-Typen haben, kann es aus zwei Dateien, von denen einem Symbol definiert und von denen nicht

Sie können auch ein Symbol projektweit definieren, aber das ist mit Projekteigenschaften gemacht oder ein Compiler wechseln anstatt im Quellcode angegeben .

Andere Tipps

MSDN , ihr Umfang die Datei

Auch wenn Sie konnte nicht die Route der Mock-Objekte gehen, ala Mock.Rhinos ?

Ja, wie Chris erwähnt, in ihrem Umfang ist die gesamte Datei. Sie können das definierte Schlüsselwort überall in der Datei verwenden.

d.h;

#define something
... some code ...

und in jeder Methode in der Klasse Körper oder Namespace, könnte es Ihnen gefällt verwenden;

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

Der Geltungsbereich einer Präprozessordirektive beginnt, wenn es von der Quelle analysiert ist und bleibt bestehen, bis anders angegeben. Wenn Sie den Rahmen einer Präprozessordirektive begrenzen wollen, verwenden Sie die „undefiniert“ Deklaration es auszuschalten, wenn Ihr damit fertig.

#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 ;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top