ejemplos - funcion estatica en fisica
¿Puede la función C main() ser estática? (5)
C tiene dos significados para ''estático'' ...
estático para una variable local significa que se puede usar de forma global. static para una variable global significa que solo se puede usar en el archivo actual.
estático para funciones tiene exactamente el mismo impacto que denotar una variable global como estática ... la función estática ES SÓLO VISIBLE EN EL ARCHIVO ACTUAL ...
Por lo tanto main puede NUNCA ser estático, ya que no podría servir como el principal punto de entrada para el programa.
¿Se puede declarar static
función main()
en un programa C? Si es así, ¿de qué sirve?
¿Es posible si utilizo un código ensamblador y llamo a la función static main()
(considere los programas integrados)?
Como otros han dicho, no, no puede. Y eso se duplica si alguna vez intentas portar tu código a C ++, ya que el Estándar C ++ especifica que main () no necesita ser una función.
No, no puedes hacerlo. Si lo haces, no podrás compilar tu programa. Debido a que la función estática solo es visible dentro del mismo archivo, el vinculador no podrá encontrarla ni hacer una llamada.
No. La especificación C realmente dice en algún lugar (leí la especificación, lo creas o no) que la función principal no puede ser estática.
La razón de esto es que estático significa "no dejes que nada fuera de este archivo fuente use este objeto". El beneficio es que protege contra colisiones de nombres en C cuando vas a vincular (sería muy malo si tuvieras dos globales llamados "is_initialized" en diferentes archivos ... se fusionarían en silencio, a menos que los hicieras) estático). También permite al compilador realizar ciertas optimizaciones que de otro modo no podría realizar. Estas dos razones explican por qué la estática es algo agradable de tener.
Como no puede acceder a funciones estáticas desde fuera del archivo, ¿cómo podría el sistema operativo acceder a la función principal para iniciar su programa? Es por eso que main no puede ser estático.
Algunos compiladores tratan "principal" especialmente y pueden ignorarlo en silencio cuando lo declara estático.
Editar: Parece que estaba equivocado sobre que la especificación dice que main no puede ser estático, pero dice que no puede estar en línea en un entorno alojado (si tiene que preguntar qué significa "entorno alojado", entonces está en uno). Pero en OS X y Linux, si declara estática principal, obtendrá un error de enlace porque el enlazador no puede encontrar la definición de "principal".
Podría tener una función estática llamada main()
en un archivo fuente, y probablemente compilaría, pero no sería la función main()
porque sería invisible para el enlazador cuando el código de inicio (crt0.o en muchos (más antiguos) sistemas Unix) llama a main()
.
Dado el código:
static int main(int argc, char **argv)
{
return(argv + argc);
}
extern int x(int argc, char **argv)
{
return(main(argc, argv));
}
GCC con -Wall dice amablemente:
warning: ''main'' is normally a non-static function
Sí, se puede hacer. No, normalmente es un error, y no es la función main()
.