В каких случаях используется тип данных void - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В каких случаях используется этот тип данных при объявлении переменных? В функциях понятно, когда нечего возвращать. А как он может быть полезен в переменных? ума не приложу. Объясните если можно с примером.

Решение задачи: «В каких случаях используется тип данных void»

textual
Листинг программы
#include <stdlib.h>
#include <errno.h>
 
void
catch_error(int local_errno)
{
    return;
}
 
void *
raise_get_mem(unsigned size)
{
    void * tmp_variable;
    
    if((tmp_variable = malloc(size)) == NULL) {
        int tmp_errno = errno;
        catch_error(errno);
        errno = tmp_errno;
        return NULL;
    }
    return tmp_variable;
}
 
int
main(int argc, char ** argv)
{
    int * int_ptr;
    double * dbl_ptr;
    
    int_ptr = raise_get_mem(sizeof(int) * 10);
    dbl_ptr = raise_get_mem(sizeof(double) * 10);
    
    free(int_ptr);
    free(dbl_ptr);
    
    exit(EXIT_SUCCESS);
}

Объяснение кода листинга программы

  1. В данном коде используется тип данных void, который применяется для функций, не возвращающих значение.
  2. Функция catch_error не возвращает значение, она предназначена для обработки ошибок и не используется в данном коде.
  3. Функция raise_get_mem предназначена для выделения памяти с помощью malloc и возврата указателя на выделенную память.
  4. Если malloc вернул NULL (что означает ошибку при выделении памяти), то в функции raise_get_mem сохраняется значение errno, вызывается функция catch_error для обработки ошибки, затем значение errno восстанавливается, и функция возвращает NULL.
  5. Если malloc успешно выделил память, то в функции raise_get_mem возвращается указатель на выделенную память.
  6. В функции main создаются два указателя int_ptr и dbl_ptr на выделение памяти с помощью функции raise_get_mem.
  7. Затем освобождается выделенная память с помощью функции free для обоих указателей.
  8. Функция main завершается с успехом (EXIT_SUCCESS), если в процессе выполнения не произошло ошибок.

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы