declaration does not declare anything : warning?

c, struct, warnings

Solution

The reason why the compiler is showing the warning is because it doesn't see a name for the variable of type `address` you defined for the `emp` struct, even though you do declare something using `address` on the next line, but I guess the compiler is not smart enough to figure that out.

As you showed, this produces a warning:

struct emp {
  struct address {}; // This statement doesn't declare any variable for the emp struct.
  struct address a1;
};

But not this:

struct emp {
  struct address {} a1; // This statement defines the address struct and the a1 variable.
};

Or this:

struct address {};

struct emp {
  struct address a1; //the only statement declare a variable of type struct address
};

The `struct emp {}` doesn't show any warnings since this statement is not inside a struct defintion block. If you did put it inside one of those then the compiler will show a warning for that as well. The following will show two warnings:

struct emp {
  struct phone {};
  struct name {};
};

Problem

``` #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { struct emp { struct address { int a; }; struct address a1; }; } ``` This code shows a warning:- warning : declaration does not declare anything (enabled by default) Where as the following code shows no warning ``` #include <stdio.h> #include <stdlib.h> #include <conio.h> int main() { struct emp { struct address { int a; }a1; }; } ``` Why 'warning' is displayed in the first code only?

Original source

Related problems