En la programación en C, ¿cuál es la diferencia entre un nombre_función y una variable?


Respuesta 1:

Un nombre de función es un nombre que asigna a una función que crea, que puede ocupar 1 a muchas líneas de código. Una función puede recibir 0 a muchos muchos parámetros; pero solo devuelve uno.

Una variable se denomina básicamente espacio de memoria asignado para recibir y almacenar información, que también se puede pasar como parámetro a una función. Normalmente retrasa las variables para que sean de un tipo determinado: entero, cadena, carácter, etc.


Respuesta 2:
En la programación en C, ¿cuál es la diferencia entre un nombre_función y una variable?

Son dos cosas completamente diferentes.

El nombre de una función (no es necesario el guión bajo, es solo una frase) es el nombre de una función, determinada cuando la función se declara o define.

Una variable es, bueno, no está 100% claro qué es una "variable" en C. El estándar C no usa la palabra "variable" en el sentido habitual. C define el término objeto como "región de almacenamiento de datos en el entorno de ejecución, cuyo contenido puede representar valores". Un objeto declarado con nombre se puede llamar razonablemente una "variable", pero no hay consenso sobre qué es exactamente o no una "variable".

Se puede llamar a una función. Un objeto puede contener valores.


Respuesta 3:

La principal diferencia es que el compilador configura automáticamente la función asociada con el nombre de una función. En C, las funciones no son "objetos de primera clase": no puede pasarlas a funciones que las modifiquen / combinen y las devuelvan de la manera que puede con números o cadenas de caracteres).

las variables contienen los valores de los objetos de primera clase (enteros, caracteres, números flotantes, etc.) Puede tener un puntero a una función y ese es un objeto de primera clase que puede almacenar y pasar / devolver de las funciones (y usar para llamar al función), pero no puede cambiar el "valor" de la función en sí en tiempo de ejecución, como puede hacerlo con objetos de primera clase.

Por lo tanto, se parecen bastante a las variables, pero lo único que puede hacer con ellas, aparte de tomar su dirección, es llamarlas. No puede decir main = {something ...}, solo tiene que definir una función principal y dejar que el compilador haga la asociación del nombre y el código detrás de escena.

Los lenguajes como Haskell, donde puede definir el valor de las funciones en tiempo de ejecución, se denominan lenguajes "funcionales" por este motivo. Un ejemplo simple sería una función llamada make tax adder, a la que le pasa una tasa impositiva y devuelve una función que agregará una tasa impositiva fija a los elementos que se le pasan:

addstatetax = maketaxadder (.05)

addlocaltax = maketaxadder (.015)

aquí hemos creado 2 funciones en tiempo de ejecución que se pueden llamar, p. addstatetax (100) devolverá 105 mientras que addlocaltax (100) devolverá 101.50.

la variable addstatetax tiene el "valor" de una función que toma un número y devuelve otro con un 5% agregado. Puede hacer cosas similares en C con estructuras y punteros de función, pero es mucho más difícil (definir tipos de punteros de función en C es notoriamente difícil) y más propenso a errores.


Respuesta 4:

El nombre de una función es esencialmente un puntero, por lo que puede hacer algo como: void (* func) (int); func = myVoidFunc; // o alternativelyfunc = & myVoidFunc;

Y esta es realmente la principal diferencia. Cuando se trabaja con el puntero normalmente, es muy importante si usa el operador de dirección de (ampersand) o no, como:

int * ptr = myVar; // andint * ptr = & myVar;

casi con certeza dará como resultado un comportamiento muy diferente, pero aparte de eso, los nombres de funciones son realmente solo punteros, al menos así es como lo veo. Estoy seguro de entrar en detalles, no tengo ningún sentido, pero desde su perspectiva, y la mía, estoy seguro de que lo hará.

Otra diferencia es, por supuesto, que no se puede deducir el nombre de una función, no se puede hacer una aritmética de puntero, o al menos si se puede, es extremadamente peligroso, y así sucesivamente.