Home > database >  Return from void function to another void function
Return from void function to another void function

Time:01-29

void reserve(int x)
{
    stream = begin;
    if (begin == NULL)
    {
        begin = stream = (struct room*)malloc(sizeof(struct room));
        details();
        stream->following = NULL;
        printf("\n\t room booking is successful!");

    
        x = stream->room_period;
        printf("\n\t your room period is: period-%d", x);
        stream->room_period = x;
        
        return;
        
    }

After running details(), will the program automatically continue to run or some words need to be added ??

CodePudding user response:

If the function detals() terminate (returns) then the following line in reserve() will run which in this case is:

     stream->following = NULL;

details presumably sets the global variable stream. Otherwise it's undefined behavior as malloc() does not initialize the memory being allocated. I suggest you avoid global variables if possible and instead pass them those variables as arguments:

details(&stream);

In C we don't cast void * and I suggest you use the variable rather than the type as argument to sizeof:

        begin = stream = malloc(sizeof *begin);

You should check the return value from malloc(). It will return NULL on failure and this will cause the following stream->following to segfault.

Not sure why you read a variable then write it back again to the same place. As x is an argument whatever you assign to it will be discard when the function returns. At least in this sample x isn't serving any purpose and could just be eliminated.

        x = stream->room_period;
        printf("\n\t your room period is: period-%d", x);
        stream->room_period = x;

Maybe you just want to do this instead?

        printf("\n\t your room period is: period-%d", stream->room_period);

Your function is missing a } so this will not compile as is.

CodePudding user response:

A void functions doesn't return a value to its caller, but it returns execution.

So the code following the call todetails() will run once (and if) it returns.

If the function details() calls exit() or a similar function, then execution will not return and your process will terminate.

Aside:

  1. Casting the result of malloc() is redundant and may hide a bug.
  2. Assuming malloc() can not fail is very optimistic and risks undefined behaviour. Check its return value.
  • Related