structs in C and .h files -
i confused on structs in c. trying create .h file has structs using. created structs.h
#include <ucontext.h> #include <string.h> #include <stdio.h> #include <stdlib.h> struct tcb_t; typedef struct { struct tcb_t * next; struct tcb_t * previous; ucontext_t context; int val; }tcb_t;
my tcb.h file
#include "structs.h" int count =0; struct tcb_t *runq = null; struct tcb_t *ptr = null; void init_tcb (struct tcb_t *tcb, void *function, void *stackp, int stack_size, int *arg) { memset(tcb, '\0', sizeof(struct tcb_t)); getcontext(&tcb->context); tcb->context.uc_stack.ss_sp = stackp; tcb->context.uc_stack.ss_size = (size_t)stack_size; makecontext(&tcb->context, function, 1, arg); }
when run next errors.
description resource path location type field 'ss_size' not resolved tcb.h /projthree/src line 14 semantic error description resource path location type field 'ss_sp' not resolved tcb.h /projthree/src line 13 semantic error description resource path location type field 'uc_stack' not resolved tcb.h /projthree/src line 13 semantic error description resource path location type field 'uc_stack' not resolved tcb.h /projthree/src line 14 semantic error description resource path location type symbol 'null' not resolved tcb.h /projthree/src line 6 semantic error description resource path location type symbol 'null' not resolved tcb.h /projthree/src line 7 semantic error
if move struct fron structs.h tcb.h errors go away. why , shouldn't tcb.h have access structs in structs.h because included "structs.h" on top of page?
the problem you've declared there struct tcb_t
somewhere, , you've defined typedef
name tcb_t
tagless (anonymous) struct
type, you've not defined type struct tcb_t
.
struct tcb_t; // there is, somewhere, type struct tcb_t typedef struct // anonymous struct, not struct tcb_t { struct tcb_t * next; struct tcb_t * previous; ucontext_t context; int val; } tcb_t; // typedef anonymous struct
you need write either this:
typedef struct tcb_t tcb_t; struct tcb_t { tcb_t *next; // optionally struct tcb_t tcb_t *previous; // optionally struct tcb_t ucontext_t context; int val; };
or this:
typedef struct tcb_t { struct tcb_t *next; struct tcb_t *previous; ucontext_t context; int val; } tcb_t;
both end struct tcb_t
, plain type tcb_t
alias struct tcb_t
.
beware, _t
suffix officially reserved utilize implementation (the compiler , supporting libraries). might run problems using (but won't until uncomfortably late alter name).
and reason compilation errors compiler hasn't been told struct tcb_t
contains, can't access context
fellow member of it, , hence not fields within context
member.
c struct
No comments:
Post a Comment