Variáveis globais da linguagem C, variáveis locais estáticas, definições de macro

Enriqueça as terceiras 8 horas do dia!

Acontece que a maioria das variáveis ​​que vi antes são variáveis ​​locais definidas na função (ela só aparece ao entrar na função e não existe depois que a função é encerrada)

Variável global

1. Variáveis ​​definidas fora das variáveis ​​globais de função

1> O tempo de vida e o escopo são globais!

2> Todas as funções podem ser usadas e acessadas.

2. Inicialização de variáveis ​​globais:

1> O compilador atribuirá automaticamente um valor de 0 às variáveis ​​globais que não são inicializadas. (A variável local é um valor aleatório!)

2> Um ponteiro global que não foi inicializado obterá um valor NULL.

3> Use apenas valores conhecidos em tempo de compilação para inicializar variáveis ​​globais

#include <stdio.h>

int gall = 1;//定义了一个全局变量gall 值为1

int gall2 = gall;//这句不行!!!是错误的,因为编译时gall算是未知量


int main(void)
{
    ......
    return 0;
}

4> Sua inicialização ocorre antes da função main ()

5> Não use variáveis ​​globais. Existem algumas atribuições, operações, etc. entre elas. Porque podemos ter chamadas de arquivo, pode haver confusão (ordem ou algo assim)

Por exemplo, antes de principal:

const int gall = 12; // Depois de adicionar const aqui, o valor de gall é conhecido em tempo de compilação

galha interna 2 = galha;

não faça isso! ! ! !

2. Se houver uma variável com o mesmo nome da variável global dentro da função, a variável global ficará oculta dentro da função e a variável global reaparecerá após sair da função.

Pode ser entendido assim: Redefinir variáveis ​​que apareceram em lugares maiores em lugares menores irá ocultá-las.

Variáveis ​​locais estáticas

 1. Adicionar uma estática antes da variável local se tornará uma variável local estática

2. A variável que deixa a função estática manterá seu valor, e da próxima vez que você entrar na função ainda será o último valor e não será reinicializada (pode-se entender que sua inicialização é única)

3. Variáveis ​​locais estáticas são, na verdade, variáveis ​​globais (você pode personalizar uma variável global, uma variável local estática e uma variável local e, em seguida, produzir seu endereço, você descobrirá que o endereço da variável global é muito próximo do endereço de a variável local estática, mas é semelhante à variável local O endereço é tão ruim)

4. Variáveis ​​locais estáticas têm vida útil global, mas são escopo local.

Pontos a serem observados ao usar variáveis ​​globais

1. Para uma função que retorna um ponteiro

1> Retornar o endereço de uma variável local é perigoso, porque a variável local não existe depois de deixar a função

2> É legal retornar os endereços de variáveis ​​globais e variáveis ​​locais estáticas

2. Não use variáveis ​​globais para passar parâmetros e resultados entre funções! !

3. Tente evitar o uso de variáveis ​​globais

4. Funções que usam variáveis ​​globais e variáveis ​​locais estáticas são thread-inseguras (você não precisa entender por enquanto)

 

Macro

1. Compile as instruções de pré-processamento:

# ......

1> O sinal # no início é para compilar instruções de pré-processamento

2> As instruções de compilação e processamento não estão disponíveis; ponto-e-vírgula (porque não é um componente da linguagem C, então entenda / dog head, mas a linguagem C não pode passar sem ele, e não é uma palavra-chave da linguagem C que o anexo inclui)

3> #define define a macro (c mais antigo não tem const e usa a definição de macro)

# define PI 3.14159

# define <name> <value> // O valor pode conter espaços, caracteres, etc.

4> Haverá uma etapa de pré-processamento antes da compilação

5> Se a definição da macro exceder uma linha, use \ barra invertida

# define PRINT1 printf("hong");\
                printf("hong");//这里的分号是PRINT常量里的!!!

6> As definições de macro podem não ter valor e são frequentemente usadas como compilação condicional

7> Existem algumas macros predefinidas

_FILE_
_LINE_
_DATE_
_TIME_

Macro com parâmetros

1. Macros como funções

#define cube(x) ((x)*(x)*(x))

Desta forma, você pode ter: printf ("% d", cubo (5));

Na verdade, a saída é ((5) * (5) * (5))

2. Deve-se notar que:

Tudo tem parênteses! :

Os parênteses devem ser colocados onde quer que o parâmetro apareça

Todo o valor (fórmula) deve ter parênteses

3. Você pode usar vários parâmetros (lembre-se de colocar parênteses nos parâmetros!)

4. Não adicione ponto e vírgula! ! !

Acho que você gosta

Origin blog.csdn.net/qq_51182221/article/details/115311132
Recomendado
Clasificación