palabra clave de atributo en lenguaje C

 

las variables del lenguaje C pueden tener sus propios atributos, en la definición de las variables se puede combinar con palabras clave de propiedad, atributo especifica la variable de palabras clave tiene un significado especial. lenguaje C con auto, registro, estática, const, palabra clave extern y otras propiedades.

auto

Auto es la propiedad predeterminada de las variables locales en lenguaje C, las variables auto show serán modificados se almacenan en la pila, el valor predeterminado compilador de todas las variables locales son auto, por lo que la siguiente declaración de variables i y j son los mismos.

int i; // 局部变量默认属性为auto
auto int j; // 显示声明为auto属性

 

Registrarse

registrar solicitudes de palabras clave a las variables locales almacenados en el registro, simplemente solicitarlo, el solicitante no podrá tener éxito, debe registrar la CPU variable de registro valor aceptable. No hay registro de direcciones, el registro no puede ser modificada para tomar la dirección de una operación de variable local. registros de la CPU son el recurso más escaso, y el ciclo de vida de las variables globales se ejecuta desde el final de la ejecución del programa, no es la variable global en un registro, lenguaje C también establece que no se puede registrar variables globales de modificación.

#include <stdio.h>

register int i; // error: register name not specified for ‘i’

int main(void) {
	register char c = 'a';
	printf("&c = %x\n", &c); // error: address of register variable ‘c’ requested
	return 0;
}

estático

La palabra clave static indica variables de las propiedades estáticas, modificación estática de las variables locales son almacenados en el área estática del programa que se ha modificado el alcance variable local estática, aunque todavía dentro del bloque, pero su ciclo de vida y tiene las mismas variables globales .

La palabra clave static tiene el sentido de "calificador de ámbito" al mismo tiempo.

Existe un margen modificado variable global estática en el archivo declarado.

modificación estática del ámbito de la función se declara en el documento.

#include <stdio.h>

int g_v; // 全局变量,在程序的任何地方都能访问
static int g_vs; // 静态全局变量,只能在当前文件中访问

int main(void) {
	int var; // 局部变量,在栈上分配空间
	static int svar; // 静态局部变量,在静态数据区分配空间
	return 0;
}
#include <stdio.h>

int fun1() {
	int r = 0;
	r++;
	return r;
}


int fun2() {
	static int r = 0;
	r++;
	return r;
}

int main(void) {
	int i = 0;
	int j = 0;

	printf("&i = 0x%d\n", &i);
	printf("&j = 0x%d\n", &j);

	for(i; i<5; i++) {
		printf("%d  %d\n", fun1(), fun2());
	}

	return 0;
}

 El resultado:

&i = 0x807994436
&j = 0x6295624
1  1
1  2
1  3
1  4
1  5

 i y j direcciones gran diferencia, porque las variables estáticas almacenadas en una región variable estática, mientras que la presencia de un área común pila variable local.

externo

El papel de una

la variable modificada extern o función que le dice al compilador que la variable o función se define en otra parte de la parte posterior enlace para encontrar cuando existe la variable o función.

#include <stdio.h>

extern int g_v;
extern int getV();
int main(void) {
	printf("g_v = %d\n", g_v);
	printf("getV() = %d\n", getV());
	return 0;
}

int g_v; // 这个变量也可以放在其他文件中,如果g_v真的没有定义,那么在链接阶段会报hallo.c:(.text+0x6): undefined reference to `g_v'的错误

int getV() {
	return g_v;
}

El papel de los dos

En algunas bibliotecas de C ++, a menudo se ve el uso de la siguiente extern.

#ifdef __cplusplus
extern "C" {
#endif
 
/*...*/
 
#ifdef __cplusplus
}
#endif

Debido a la diferente C y el compilador y el enlazador de reglas, como función de programa signo C C ++ es el nombre de la función, y C ++ debido a la pesada carga de la presencia, en un símbolo del nombre de función y el tipo de parámetro de las funciones están relacionadas, en C y C ++ programación mixta programa, dará como resultado el fenómeno no se puede vincular las bibliotecas de C de C ++. extern "C" {} indica al compilador para compilar y variables de enlace declarada en la función estándar de C {}, con el fin de resolver el problema de programación C ++ C / mixta.

extern "C" {
    int fun(int a, int b) {
        return a + b;
    }
}

extern "C++" {
    int fun(int a, int b) {
        return a + b;
    }
}

Publicado 28 artículos originales · ganado elogios 9 · vistas 5602

Supongo que te gusta

Origin blog.csdn.net/rookiegan/article/details/104886158
Recomendado
Clasificación