Antes de comenzar a hablar sobre __func__ , escribamos un fragmento de código y anticipemos el resultado:
C
#include <stdio.h> int main() { printf("%s",__func__); return 0; }
¿Compilará el error debido a que no define la variable __func__ ? Bueno, como habrás adivinado hasta ahora, no dará ningún error de compilación y ¡imprimirá main !
El estándar del lenguaje C (es decir, C99 y C11) define un identificador predefinido de la siguiente manera en la cláusula 6.4.2.2:
“ El identificador __func__ debe ser declarado implícitamente por el traductor como si, inmediatamente después de la llave de apertura de cada definición de función, la declaración
static const char __func__[] = “nombre-función”;
apareció, donde nombre-función es el nombre de la función que encierra léxicamente. “
Significa que el compilador de C agrega implícitamente __func__ en cada función para que pueda usarse en esa función para obtener el nombre de la función. Para entenderlo mejor, escribamos este código:
C
#include <stdio.h> void foo(void) { printf("%s",__func__); } void bar(void) { printf("%s",__func__); } int main() { foo(); bar(); return 0; }
Y dará salida como foobar . Un caso de uso de este identificador predefinido podría ser registrar la salida de un gran programa donde un programador puede usar __func__ para obtener la función actual en lugar de mencionar explícitamente el nombre completo de la función. Ahora que pasa si definimos una variable mas de nombre __func__
C
#include <stdio.h> int __func__ = 10; int main() { printf("%d",__func__); return 0; }
Dado que el estándar C dice que el compilador define implícitamente __func__ para cada función como el nombre de la función, no deberíamos definir __func__ en primer lugar. Es posible que obtenga un error, pero el estándar C dice «comportamiento indefinido» si alguien define explícitamente __func__ .
Solo para terminar la discusión sobre el identificador predefinido __func__ , mencionemos también las macros predefinidas (como __FILE__ y __LINE__, etc.). Básicamente, la cláusula estándar C 6.10.8 menciona varias macros predefinidas, de las cuales __FILE__ y __LINE__ son relevantes aquí.
Vale la pena ver el resultado del siguiente fragmento de código:
C
#include <stdio.h> int main() { printf("In file:%s, function:%s() and line:%d",__FILE__,__func__,__LINE__); return 0; }
¡En lugar de explicar el resultado, le dejaremos esto a usted para que adivine y comprenda el papel de __FILE__ y __LINE__ !
Haga clic en Me gusta/Tweet/G+1 si encuentra útil lo anterior. Además, déjenos un comentario para obtener más aclaraciones o información. Nos encantaría ayudar y aprender 🙂
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA