2008-11-17 9 views
7

# estoy buscando a utilizar:c pre-procesador de alcance Directiva

#define 

y

#if 

que me permita simular el hardware potencialmente ausentes durante las pruebas unitarias. ¿Cuáles son las reglas para usar las declaraciones #define?

es decir, ¿cuál es su alcance predeterminado? ¿Puedo cambiar el alcance de la directiva?

Respuesta

12

Como dijo Chris, el alcance de #define es solo el archivo. (Vale la pena señalar que esto no es lo mismo que "la clase": si tiene un tipo parcial, puede constar de dos archivos, uno de los cuales tiene el símbolo definido y el otro no!

Usted también puede definir un símbolo de todo el proyecto, pero que se han hecho con project properties o una compiler switch en lugar de estar especificada en el código fuente.

3

De MSDN, su alcance es el archivo

1

A pesar de que no podía seguir el camino de objetos Mock, ala Mock.Rhinos?

1

Sí como Chris mencionó, su alcance es el archivo completo. se puede utilizar el definido palabra clave en cualquier parte del archivo

es decir;.

#define something 
... some code ... 

y en cualquier método, cuerpo de clase o espacio de nombres, puede usarlo como;

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

El alcance de una directiva de preprocesador se inicia cuando se analiza desde la fuente y persiste hasta que se indique lo contrario. Si desea limitar el alcance de una directiva de preprocesador, utilice la declaración "undef" que apaga cuando haya terminado con ella.

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