Home > Mobile >  pointer to struct in function prototype before defining struct
pointer to struct in function prototype before defining struct

Time:12-13

I am trying to create a struct that I will use in a function via pointers. The issue is that I do not want to use global variables therefore I can't use a pointer to a struct as a parameter for the function prototype if I try to define the struct in main file, since it has not been defined yet.

How would I go about doing this? What I think the solution is, is to define the struct in a header file, then create local variables of that type in the main file. Is this the right way to go about this? Would appreciate some info about what i'm actually doing here if this is correct.

Sorry if I did anything wrong when posting, Its my first time.

Example of what I am thinking the solution is

Main.h

#include <stdio.h>
                  
typedef struct Vehicle{
int a;
char b;
};
function(Vehicle *p);

Main.c

#include "Main.h"

Vehicle Car1;
Vehicle *p=&Car1; 
function(p);

CodePudding user response:

The proper syntax for a typedef is

typedef T-IDENTIFIER IDENTIFIER-LIST;

wherein the comma separated identifiers listed in IDENTIFIER-LIST become aliases for T-IDENTIFIER. A lot of the time IDENTIFIER-LIST will consist of a single identifier.

For example, in

typedef int integer, number;

integer and number are now type aliases for int.

When it comes to using typedef with structs, the form

typedef struct foo { /* ... */ } foo_type;

is more or less shorthand for

typedef struct foo foo_type;
struct foo { /* ... */ };

but does allow you to typedef an anonymous struct

typedef struct { /* ... */ } foo_type;

With all that said, in your code you have omitted the IDENTIFIER-LIST from your typedef.


If main.c really does consist entirely of the code you've posted, it will not compile. Every C program needs an entry point, and in a hosted environment that is the function main with the signature int main(void) or int main(int argc, char **argv).

While you can declare variables outside of functions (i.e., globals), you can not call functions from outside of functions. Everything starts from main.

A working example program:

main.h:

typedef struct {
    int a;
    char b;
} Vehicle;     
                          
void function(Vehicle *p);

main.c:

#include <stdio.h>
#include "main.h"

int main(void) {
    Vehicle car = { 51, 'A' };

    function(&car);
}

void function(Vehicle *v) {
    printf("Vehicle: a: %d, b: %c\n", v->a, v->b);
}

CodePudding user response:

I can't use the struct as a parameter for the function prototype

You misunderstood something.

  1. Your typedef is rather useless.
  2. You of course can use pointers to structs as function parameters and in the function prototypes.
typedef struct {
int a;
char b;
} Vehicle;


int foo(Vehicle *);  // prototype

You can't call function not outside other functions (as it is shown in the main.c

  •  Tags:  
  • c
  • Related