#include #include typedef struct point { double x, y; } point; /* Nested anonymous struct declaration compiles with MS extensions only. So you have to use -fms-extensions flag with gcc / clang. C11 standard allows no typedef in the nested anonymous declaration :( */ typedef struct { struct point; double z; } threepoint; double threelength(threepoint p) { return sqrt(p.x * p.x + p.y * p.y + p.z * p.z); } int main () { threepoint p = {.x = 3, .y = 0, .z = 4}; printf("p is %g units from the origin\n", threelength(p)); }