Diretivas de pré-processador C#
Diretivas do pré-processador C#
Neste tutorial, aprenderemos sobre Diretivas de pré-processador, diretivas disponíveis em C# e quando, por que e como elas são usadas.
Como o nome justifica, as diretivas de pré-processador são um bloco de instruções que são processadas antes do início da compilação real. As diretivas de pré-processador C# são os comandos para o compilador que afetam o processo de compilação.
Esses comandos especificam quais seções do código compilar ou como lidar com erros e avisos específicos.
A diretiva de pré-processador C# começa com um
# (hash) símbolo e todas as diretivas do pré-processador duram uma linha. As diretivas do pré-processador são encerradas por new line em vez de semicolon . As diretivas de pré-processador disponíveis em C# são:
| Diretiva de pré-processador | Descrição | Sintaxe |
|---|---|---|
#if | Verifica se uma expressão do pré-processador é verdadeira ou não | #if preprocessor-expression code to compile #endif |
#elif | Usado junto com #if para verificar várias expressões de pré-processador | #if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code to compile #endif |
#else | Usado junto com #if para criar uma diretiva condicional composta. | #if preprocessor-expression code to compile #elif code to compile #endif |
#endif | Usado junto com #if para indicar o fim de uma diretiva condicional | #if preprocessor-expression code to compile #endif |
#define | Usado para definir um símbolo | #define SYMBOL |
#undef | Usado para indefinir um símbolo | #undef SYMBOL |
#warning | Permite gerar um aviso de nível 1 do nosso código | #warning warning-message |
#error | Permite gerar erro do nosso código | #error error-message |
#line | Permite modificar o número da linha do compilador e o nome do arquivo para exibir erros e avisos | #line line-number file-name |
#region | Permite criar uma região que pode ser expandida ou recolhida ao usar um Editor de código do Visual Studio | #region region-description codes #endregion |
#endregion | Indica o fim de uma região | #region region-description codes #endregion |
#pragma | Dá ao compilador instruções especiais para a compilação do arquivo no qual ele aparece. | #pragma pragma-name pragma-arguments |
#define diretiva
- O
#definediretiva nos permite definir um símbolo. - Símbolos que são definidos quando usados junto com
#ifdiretiva será avaliada como verdadeira. - Esses símbolos podem ser usados para especificar condições para compilação.
- Sintaxe:
#define SYMBOL
- Por exemplo:
#define TESTING
Aqui, TESTING é um símbolo.
#undef diretiva
- O
#undefdiretiva nos permite indefinir um símbolo. - Símbolos indefinidos quando usados junto com
#ifdiretiva será avaliada como false. - Sintaxe:
#undef SYMBOL
- Por exemplo:
#undef TESTING
Aqui, TESTING é um símbolo.
#if diretiva
- Os
#ifdiretiva são usadas para testar a expressão do pré-processador. - Uma expressão de pré-processador pode consistir em apenas um símbolo ou uma combinação de símbolos junto com operadores como
&&(AND),||(OU),!(NÃO). #ifdiretiva é seguida por um#endifdiretiva.- Os códigos dentro do
#ifdiretiva é compilada somente se a expressão testada com#ifavalia como verdadeiro. - Sintaxe:
#if preprocessor-expression code to compile< #endif
- Por exemplo:
#if TESTING Console.WriteLine("Currently Testing"); #endif
Exemplo 1:Como usar a diretiva #if?
#define CSHARP
using System;
namespace Directive
{
class ConditionalDirective
{
public static void Main(string[] args)
{
#if (CSHARP)
Console.WriteLine("CSHARP is defined");
#endif
}
}
}
Ao executarmos o programa, a saída será:
CSHARP is defined
No programa acima,
CSHARP símbolo é definido usando o #define diretiva no início do programa. Dentro do Main() método, #if é usada para testar se CSHARP é verdade ou não. O bloco de código dentro de #if diretiva é compilada somente se CSHARP é definido. Diretiva #elif
- O
#elifA diretiva é usada junto com a diretiva #if que nos permite criar uma diretiva condicional composta. - É usado ao testar a expressão de vários pré-processadores.
- Os códigos dentro do
#elifdiretiva é compilada somente se a expressão testada com esse#elifavalia como verdadeiro. - Sintaxe:
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #endif
- Por exemplo:
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #endif
Diretiva #else
- O
#elsediretiva é usada junto com#ifdiretiva. - Se nenhuma das expressões no
#ifanterior e#elif(se presente) diretivas são verdadeiras, os códigos dentro do#elsediretiva será compilada. - Sintaxe:
#if preprocessor-expression-1 code to compile #elif preprocessor-expression-2 code-to-compile #else code-to-compile #endif
- Por exemplo:
#if TESTING Console.WriteLine("Currently Testing"); #elif TRAINING Console.WriteLine("Currently Training"); #else Console.WriteLine("Neither Testing nor Training"); #endif
Diretiva #endif
- O
#endifdiretiva é usada junto com#ifdiretiva para indicar o fim de#ifdiretiva. - Sintaxe:
#if preprocessor-expression-1 code to compile #endif
- Por exemplo:
#if TESTING Console.WriteLine("Currently Testing"); #endif
Exemplo 2:Como usar a diretiva condicional (if, elif, else, endif) ?
#define CSHARP
#undef PYTHON
using System;
namespace Directive
{
class ConditionalDirective
{
static void Main(string[] args)
{
#if (CSHARP && PYTHON)
Console.WriteLine("CSHARP and PYTHON are defined");
#elif (CSHARP && !PYTHON)
Console.WriteLine("CSHARP is defined, PYTHON is undefined");
#elif (!CSHARP && PYTHON)
Console.WriteLine("PYTHON is defined, CSHARP is undefined");
#else
Console.WriteLine("CSHARP and PYTHON are undefined");
#endif
}
}
} Ao executarmos o programa, a saída será:
CSHARP is defined, PYTHON is undefined
Neste exemplo, podemos ver o uso de
#elif e #else diretiva. Essas diretivas são usadas quando há várias condições a serem testadas. Além disso, os símbolos podem ser combinados usando operadores lógicos para formar uma expressão de pré-processador. #diretiva de aviso
- O
#warningA diretiva nos permite gerar um aviso de nível um definido pelo usuário a partir de nosso código. - Sintaxe:
#warning warning-message
- Por exemplo:
#warning This is a warning message
Exemplo 3:como usar a diretiva #warning?
using System;
namespace Directives
{
class WarningDirective
{
public static void Main(string[] args)
{
#if (!CSHARP)
#warning CSHARP is undefined
#endif
Console.WriteLine("#warning directive example");
}
}
}
Ao executarmos o programa, a saída será:
Program.cs(10,26): warning CS1030: #warning: 'CSHARP is undefined' [/home/myuser/csharp/directives-project/directives-project.csproj] #warning directive example
Depois de executar o programa acima, veremos a saída como acima. O texto representa uma mensagem de aviso. Aqui, estamos gerando uma mensagem de aviso definida pelo usuário usando o
#warning diretiva. Observe que as instruções após o
#warning diretiva também são executadas. Isso significa que o #warning A diretiva não encerra o programa, mas apenas lança um aviso. Diretiva #error
- O
#errorA diretiva nos permite gerar um erro definido pelo usuário a partir de nosso código. - Sintaxe:
#error error-message
- Por exemplo:
#error This is an error message
Exemplo 4:como usar a diretiva #error?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#if (!CSHARP)
#error CSHARP is undefined
#endif
Console.WriteLine("#error directive example");
}
}
}
Ao executarmos o programa, a saída será:
Program.cs(10,24): error CS1029: #error: 'CSHARP is undefined' [/home/myuser/csharp/directives-project/directives-project.csproj] The build failed. Please fix the build errors and run again.
Veremos alguns erros, provavelmente como acima. Aqui estamos gerando um erro definido pelo usuário.
Outra coisa a notar aqui é que o programa será encerrado e a linha
#error directive example não será impresso como estava no #warning diretiva. #line diretiva
- O
#lineA diretiva nos permite modificar o número da linha e o nome do arquivo para erros e avisos. - Sintaxe:
#line line-number file-name
- Por exemplo:
#line 50 "fakeprogram.cs"
Exemplo 5:Como usar a diretiva #line?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#line 200 "AnotherProgram.cs"
#warning Actual Warning generated by Program.cs on line 10
}
}
}
Ao executarmos o programa, a saída será:
AnotherProgram.cs(200,22): warning CS1030: #warning: 'Actual Warning generated by Program.cs on line 10' [/home/myuser/csh arp/directive-project/directive-project.csproj]
Salvamos o exemplo acima como
Program.cs . O aviso foi realmente gerado em line 10 por Program.cs . Usando o #line diretiva, alteramos o número da linha para 200 e o nome do arquivo para AnotherProgram.cs que gerou o erro. #region e #endregion diretiva
- O
#regionA diretiva nos permite criar uma região que pode ser expandida ou recolhida ao usar um Editor de código do Visual Studio. - Esta diretiva é usada simplesmente para organizar o código.
- O bloco #region não pode se sobrepor a um
#ifquadra. No entanto, um#regionbloco pode ser incluído em um#ifbloco e um#ifbloco pode se sobrepor a um#regionbloquear. #endregiondiretiva indica o fim de um#regionbloquear.- Sintaxe:
#region region-description codes #endregion
Exemplo 6:como usar a diretiva #region?
using System;
namespace Directive
{
class Region
{
public static void Main(string[] args)
{
#region Hello
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
Console.WriteLine("Hello");
#endregion
}
}
}
Ao executarmos o programa, a saída será:
Hello Hello Hello Hello Hello
Diretiva #pragma
- O
#pragmaA diretiva é usada para fornecer ao compilador algumas instruções especiais para a compilação do arquivo no qual ela aparece. - A instrução pode incluir a desativação ou ativação de alguns avisos.
- C# suporta dois
#pragmainstruções:#pragma warning:usado para desabilitar ou habilitar avisos#pragma checksum:gera somas de verificação para arquivos de origem que serão usados para depuração.
- Sintaxe:
#pragma pragma-name pragma-arguments
- Por exemplo:
#pragma warning disable
Exemplo 7:Como usar a diretiva #pragma?
using System;
namespace Directive
{
class Error
{
public static void Main(string[] args)
{
#pragma warning disable
#warning This is a warning 1
#pragma warning restore
#warning This is a warning 2
}
}
}
Ao executarmos o programa, a saída será:
Program.cs(12,22): warning CS1030: #warning: 'This is a warning 2' [/home/myuser/csharp/directive-project/directive-project.csproj]
Podemos ver que apenas o segundo aviso é exibido na tela de saída.
Isso ocorre porque, inicialmente, desabilitamos todos os avisos antes do primeiro aviso e os restauramos apenas antes do segundo aviso. Esta é a razão pela qual o primeiro aviso foi ocultado.
Também podemos desabilitar o aviso específico em vez de todos os avisos.
Para saber mais sobre
#pragma , visite #pragma (referência C#). Linguagem C