I saw a question the other day where someone inadvertently used an incomplete type by specifying something like
struct a { int q; }; struct A *x; x->q = 3;
The compiler knew that struct A
was a struct, despite A
being totally undefined, by virtue of the struct
keyword.
That was in C++, where such usage of struct
is atypical (and, it turns out, can lead to foot-shooting). In C if you do
typedef struct a { ... } a;
then you can use a
as the typename and omit the struct
later. This will lead the compiler to give you an undefined identifier error later, rather than incomplete type, if you mistype the name or forget a header.
Related Posts:
- typedef struct vs struct definitions [duplicate]
- Why should we typedef a struct so often in C?
- Why should we typedef a struct so often in C?
- typedef struct vs struct definitions [duplicate]
- typedef struct pointer definition
- uint8_t vs unsigned char
- What does “collect2: error: ld returned 1 exit status” mean?
- What does “collect2: error: ld returned 1 exit status” mean?
- What does “collect2: error: ld returned 1 exit status” mean?
- How do you make an array of structs in C?
- C programming, error: called object is not a function or function pointer
- C compile error: “Variable-sized object may not be initialized”
- Difference between a Structure and a Union
- error: expected primary-expression before ‘)’ token (C)
- How to initialize a struct in accordance with C programming language standards
- Incompatible implicit declaration of built-in function ‘malloc’
- What is the cause of flexible array member not at end of struct error?
- C compile error: Id returned 1 exit status
- size of struct in C
- (.text+0x20): undefined reference to `main’ and undefined reference to function
- Why am I getting this error: “data definition has no type or storage class”?
- Scanning Multiple inputs from one line using scanf
- “warning: useless storage class specifier in empty declaration” in struct
- How big can a 64 bit unsigned integer be?
- The difference between n++ and ++n at the end of a while loop? (ANSI C)
- Implementing Taylor Series for sine and cosine in C
- Working on code to calculate cosine with factorial sum
- How to use execvp()
- How to use execvp() to execute a command
- How does strtok() split the string into tokens in C?
- warning: implicit declaration of function
- warning: implicit declaration of function
- What is *(uint32_t*)?
- pthread_join() and pthread_exit()
- what is Segmentation fault (core dumped)? [duplicate]
- What causes a segmentation fault (core dump) to occur in C?
- How to use symbols of extended ASCII table in C?
- Two questions about basic C programs
- What is the difference between ++i and i++?
- Using boolean values in C
- How to convert an int to string in C?
- How to print in C
- What is a string of hexadecimal digits?
- What exactly is the difference between “pass by reference” in C and in C++?
- What is the difference between ++i and i++?
- What can be the reasons of connection refused errors?
- How to convert an int to string in C?
- What is newline character — ‘\n’
- Why does ENOENT mean “No such file or directory”?
- What does the question mark character (‘?’) mean?
- Cannot figure out how to use getchar(); in C
- Floating point exception (core dumped)
- Undefined reference to pthread_create in Linux
- what is the difference between uint16_t and unsigned short int incase of 64 bit processor?
- makefile:4: *** missing separator. Stop
- Stack smashing detected
- Why am I getting “void value not ignored as it ought to be”?
- Correct format specifier for double in printf
- Compiler Error “void value not ignored as it ought to be” in C programming [duplicate]
- Stack smashing detected
- How do I determine the size of my array in C?
- Why am I getting “void value not ignored as it ought to be”?
- Pointer Arithmetic
- 1 = false and 0 = true?
- c stack smashing detected
- What does “dereferencing” a pointer mean?
- Openssl : error “self signed certificate in certificate chain”
- How to convert a string to integer in C?
- What is the difference between C and embedded C?
- What does “dereferencing” a pointer mean?
- Get a substring of a char* [duplicate]
- char *array and char array[]
- How do I create an array of strings in C?
- Undefined reference to pthread_create
- What is the behavior of integer division?
- Convert char to int in C and C++
- Get a substring of a char*
- Difference between malloc and calloc?
- What is Bit Masking?
- How do function pointers in C work?
- Expression must be a modifiable L-value
- What causes the Broken Pipe Error?
- segmentation fault : 11
- Strings and character with printf
- Awesomium sdk download
- What is EOF in the C programming language?
- What are .a and .so files?
- Why does the terminal show “^[[A” “^[[B” “^[[C” “^[[D” when pressing the arrow keys in Ubuntu?
- So what does “return 0” actually mean?
- “Expected expression before ‘ { ‘ token”
- Bad File Descriptor with Linux Socket write() Bad File Descriptor C
- How to generate a random int in C?
- How do I use valgrind to find memory leaks?
- C pointers and arrays: [Warning] assignment makes pointer from integer without a cast
- Why is the gets function so dangerous that it should not be used?
- Write to .txt file?
- What is the difference between char s[] and char *s?
- warning: assignment makes integer from pointer without a cast
- How to print the array?
- How to solve the error: assignment to expression with array type