2008-11-17 5 views
7

Ich bin auf der Suche zu verwenden:C# Pre-Prozessor-Direktive Umfang

#define 

und

#if 

mir zu erlauben, während Unit-Tests möglicherweise fehlen Hardware zu simulieren. Welche Regeln gelten für die Verwendung der #define-Anweisungen?

. Was ist der Standardbereich? Kann ich den Geltungsbereich der Richtlinie ändern?

Antwort

12

Wie Chris sagte, der Umfang von #define ist nur die Datei. (Es ist bemerkenswert, dass dies nicht das gleiche wie "die Klasse" ist - wenn Sie einen partiellen Typ haben, kann es aus zwei Dateien bestehen, von denen eine Symbol definiert hat und eine davon nicht!

Sie kann auch ein Symbol projektweit definieren, sondern dass mit project properties oder compiler switch eher getan als im Quellcode angegeben werden.

3

Von MSDN, deren Umfang ist die Datei

1

Obwohl konnten Sie nicht die Route der Mock-Objekte gehen, ala Mock.Rhinos?

1

Ja wie Chris erwähnte, ist in ihrem Umfang die gesamte Datei. Sie haben die Definition in dem Schlüsselwort überall benutzen Datei

dh,.

#define something 
... some code ... 

und in jeder Methode, Klassenkörper oder Namespace, könnten Sie es wie verwenden;

0

Der Gültigkeitsbereich einer Präprozessordirektive beginnt, wenn sie von der Quelle analysiert wird, und bleibt bestehen, bis eine andere Anweisung erfolgt. Wenn Sie den Umfang einer Präprozessordirektive einschränken möchten, verwenden Sie die Deklaration "undef", die Sie ausschalten, wenn Sie damit fertig sind.

#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 ; 
}