varios valor validar vacios vacio vacia una saber nulo esta como caracter cadena arreglo c# c++ c language-design terminology

valor - validar varios textbox vacios c#



¿Qué significa vacío en C, C++ y C#? (15)

Básicamente significa "nada" o "ningún tipo"

Hay 3 formas básicas en que se usa el vacío:

  1. Argumento de la función: int myFunc(void) - la función no toma nada.

  2. Valor de retorno de la función: void myFunc(int) - la función no devuelve nada

  3. Puntero de datos genérico: void* data - ''data'' es un puntero a datos de tipo desconocido, y no puede ser desreferenciado

Nota: el void en un argumento de función es opcional en C ++, por lo que int myFunc() es exactamente lo mismo que int myFunc(void) , y se int myFunc(void) por completo en C #. Siempre se requiere un valor de retorno.

Buscando obtener los fundamentos de dónde proviene el término VACÍO y por qué se llamaría vacío. La intención de la pregunta es ayudar a alguien que no tiene experiencia en C y de repente está buscando una base de código basada en C.


En c # usaría la palabra clave void para indicar que un método no devuelve un valor:

public void DoSomeWork() { //some work }


Hay dos formas de usar el vacío:

void foo(void);

o

void *bar(void*);

El primero indica que no se está pasando ningún argumento o que no se está devolviendo ningún argumento.

El segundo le dice al compilador que no hay ningún tipo asociado con los datos, lo que significa que no puede usar los datos apuntados hasta que se lo transfiera a un tipo conocido.

Por ejemplo, verá que void* usa mucho cuando tiene una interfaz que llama a una función cuyos parámetros no pueden conocerse con anticipación.

Por ejemplo, en el Kernel de Linux al aplazar el trabajo, configurará una función para que se ejecute en un momento posterior al darle un puntero a la función que se ejecutará y un puntero a los datos que se transferirán a la función:

struct _deferred_work { sruct list_head mylist; .worker_func = bar; .data = somedata; } deferred_work;

Luego, un hilo del kernel pasa por una lista de trabajo diferido y cuando llega a este nodo se ejecuta de manera efectiva:

bar(somedata);

Luego en la barra tienes:

void bar(void* mydata) { int *data = mydata; /* do something with data */; }


Indica la ausencia de un valor de retorno en una función.

Algunos lenguajes tienen dos tipos de subrutinas: procedimientos y funciones. Los procedimientos son solo una secuencia de operaciones, mientras que una función es una secuencia de operaciones que devuelve un resultado.

En C y sus derivados, la diferencia entre los dos no es explícita. Todo es básicamente una función. la palabra clave void indica que no es una función "real", ya que no devuelve un valor.


Piensa en el vacío como la "estructura vacía". Dejame explicar.

Cada función toma una secuencia de parámetros, donde cada parámetro tiene un tipo. De hecho, podríamos empaquetar los parámetros en una estructura, con los espacios de estructura correspondientes a los parámetros. Esto hace que cada función tenga exactamente un argumento. Del mismo modo, las funciones producen un resultado, que tiene un tipo. Podría ser un booleano, o podría ser flotante, o podría ser una estructura, que contiene un conjunto arbitrario de otros valores tipados. Si queremos un lenguaje que tenga múltiples valores de retorno, es fácil insistir en que estén empaquetados en una estructura. De hecho, siempre podríamos insistir en que una función devuelva una estructura. Ahora cada función toma exactamente un argumento y produce exactamente un valor.

Ahora, ¿qué sucede cuando necesito una función que produce un valor "no"? Bien, considere lo que obtengo cuando formo una estructura con 3 ranuras: contiene 3 valores. Cuando tengo 2 espacios, tiene dos valores. Cuando tiene una ranura, un valor. Y cuando tiene cero espacios, tiene ... uh, valores cero, o "no" valor ". Entonces, puedo pensar en una función que devuelve vacía como una estructura que no contiene valores. Incluso puede decidir que es" nula " es solo un sinónimo del tipo representado por la estructura vacía, en lugar de una palabra clave en el idioma (tal vez es solo un tipo predefinido :)

Del mismo modo, puedo pensar en una función que no requiere valores como la aceptación de una estructura vacía, por ejemplo, "vacío".

Incluso puedo implementar mi lenguaje de programación de esta manera. Pasar un valor vacío toma cero bytes, por lo que pasar valores vacíos es solo un caso especial de pasar otros valores de tamaño arbitrario. Esto facilita que el compilador trate el resultado o argumento "vacío". Probablemente desee una característica de idioma que pueda arrojar el resultado de una función; en C, si llama a la función de resultado no nulo foo en la siguiente instrucción: foo (...); el compilador sabe que foo produce un resultado y simplemente lo ignora. Si void es un valor, esto funciona perfectamente y ahora los "procedimientos" (que son solo un adjetivo para una función con resultado nulo) son solo casos especiales triviales de funciones generales.

Void * es un poco más divertido. No creo que los diseñadores de C pensaran en el vacío de la manera anterior; acaban de crear una palabra clave. Esa palabra clave estaba disponible cuando alguien necesitaba un punto para un tipo arbitrario, por lo tanto nulo * como el modismo en C. Realmente funciona bastante bien si interpreta el vacío como una estructura vacía. Un puntero void * es la dirección de un lugar donde se colocó esa estructura vacía.

Los lanzamientos de vacío * a T * para otros tipos T, también funcionan con esta perspectiva. Los modelos de punteros son una trampa completa que funciona en las arquitecturas más comunes para aprovechar el hecho de que si un compuesto tipo T tiene un elemento con subtipo S colocado físicamente al principio de T en su disposición de almacenamiento, entonces fundir S * a T * y viceversa, usar la misma dirección física de la máquina tiende a funcionar, ya que la mayoría de los punteros de la máquina tienen una sola representación. Reemplazar el tipo S por el tipo void da exactamente el mismo efecto, y por lo tanto fundir a / de void * funciona.

El lenguaje de programación PARLANSE implementa las ideas anteriores muy de cerca. Nos equivocamos en su diseño y no le prestamos mucha atención al "vacío" como un tipo de devolución y, por lo tanto, teníamos palabras clave de idioma para el procedimiento. Es principalmente un simple cambio de sintaxis, pero es una de las cosas que no puedes hacer una vez que obtienes un código de trabajo corporal grande en un idioma.


Si le está explicando el concepto a un principiante, podría ser útil usar una analogía. El uso de vacío en todos estos casos es análogo al significado de una página de un libro que tiene las siguientes palabras: "Esta página se dejó en blanco intencionalmente". Es para diferenciar al compilador entre algo que debe marcarse como un error, frente a un tipo que se debe dejar en blanco intencionalmente porque ese es el comportamiento que desea.

Siempre aparece en el código donde normalmente esperaría que aparezca un tipo, como un tipo de devolución o un tipo de puntero. Esta es la razón por la cual en C #, el vacío se mapea a un tipo de CLR real, System.Void porque es un tipo en sí mismo.

Algunos lenguajes de programación nunca desarrollaron el concepto de vacío, al igual que algunas culturas humanas nunca inventaron el concepto del número cero. Void representa el mismo avance en un lenguaje de programación que el concepto de cero representa para el lenguaje humano.


Siempre lo he tomado como significado ausente . Aquí hay cuatro casos en el lenguaje C que coinciden con este uso de ausente

  • R f(void) - Los parámetros de función están ausentes
  • void f(P) - El valor de retorno está ausente
  • void *p - El tipo de lo apuntado está ausente
  • (void) p - El uso del valor está ausente

Otros descendientes de C lo usan para otras cosas. El lenguaje de programación D usa para casos donde falta un inicializador

  • T t = void; - el valor de inicialización está ausente

Significa "sin valor". Utiliza void para indicar que una función no devuelve un valor o que no tiene parámetros o ambos. Bastante consistente con los usos típicos de la palabra vacío en inglés.


Significa "sin valor". Utiliza el vacío para indicar que una función no devuelve un valor o que no tiene parámetros o ambos. Es muy consistente con los usos típicos de la palabra vacío en inglés.

Void no se debe confundir con null. Nulo significa para la variable cuya dirección está en la pila, el valor en el montón para esa dirección está vacío.


Tres casos de uso para el vacío:

  1. Firmas de funciones. void foo(int bar) no devuelve un valor. int bar(void) no toma ningún parámetro, pero esto generalmente se expresa con la lista de argumentos vacía: int bar() . El uso de la palabra clave void aquí corresponde a su significado en inglés.

  2. El void * genérico del puntero de tipo superior void * apunta a datos no especificados y no se puede desreferenciar. Aquí el significado de vacío es diferente de otros significados de vacío: tipo universal vs. no tipo.

  3. En modelos como (void) new Foo(this) para indicar que el valor de retorno es deliberadamente desechado. Aquí el uso de la palabra clave también coincide con su significado en inglés.

Los casos 1 y 2 ya fueron cubiertos por @Gerald, pero el caso 3 aún no se ha abordado.


Void es el equivalente al Sub de Visual Basic.


Void es un tipo incompleto que por deffinition no puede ser un lvalue. Lo que significa que no se le puede asignar un valor.

Por lo tanto, tampoco puede tener ningún valor.


Void se usa solo en las firmas de métodos. Para los tipos de devolución, significa que el método no devolverá nada al código de llamada. Para los parámetros, significa que no se pasan parámetros al método

p.ej

void MethodThatReturnsAndTakesVoid(void) { // Method body }

En C # podemos omitir el vacío para los parámetros y podemos escribir el código anterior como sigue:

void MethodThatReturnsAndTakesVoid() { // Method body }

Void no se debe confundir con null. Nulo significa para la variable cuya dirección está en la pila, el valor en el montón para esa dirección está vacío.


Void significa que no se requiere ningún valor en el tipo de devolución de una función en los tres idiomas.


nulo significa que no devolverá ningún valor de la función o método