La respuesta es “sí”, al menos en GCC utilizando la función de función anidada (no estándar).
El siguiente código funciona como se esperaba:
[código]
#include
- Estamos planeando relanzar nuestro boletín de empleados. Queremos que sea lo más interesante posible. Además de las actualizaciones comerciales, nuevas iniciativas también queremos incluir secciones para la lectura de ocio. ¿Cuáles son algunas de las cosas que podemos incluir en nuestra sección de lectura de ocio?
- ¿Cuál es la forma correcta de escribir los 26 caracteres?
- Cómo escribir sus propias respuestas con sus propias palabras mientras lee o lee un libro de texto o un artículo
- ¿Es este párrafo apropiado o demasiado rápido?
- Cómo necesitar escribir una propuesta independiente
int main () {
fprintf (stdout, “Hola mundo # 1 \ n”);
int main () {
fprintf (stdout, “Hola mundo # 2 \ n”);
devuelve 0;
}
principal();
}
[/código]
Aquí está la salida:
[código]
Hola mundo # 1
Hola mundo # 2
[/código]
¿Por qué funciona esto? Las funciones anidadas tienen alcance léxico. La llamada a main()
en el cuerpo de main()
encuentra la función anidada main()
dentro del alcance más cercano (el cuerpo de la función) y deja de buscar el símbolo en ese punto. Por lo tanto, no hay conflicto con el main()
global main()
. Durante la compilación, el vinculador encuentra el main()
global y usa esa dirección como destino para la llamada desde _start()
. Estoy sacando esto de algunos rincones polvorientos de la memoria; Las correcciones son inusualmente bienvenidas.
La documentación de GCC para funciones anidadas está aquí. Clang usa una idea similar llamada Bloques que podría permitirte hacer un truco similar. Aquí hay un buen resumen de las sutilezas involucradas: Dar el cierre a C. Kelly Kinkade puede explicar esto mucho mejor que yo, y espero que lo haga.
nb ¿Por qué el marcado de bloque de código ya no funciona en Quora?