The company I work at is initializing all of their data structures through an initialize function like so:  //the structuretypedef struct{  int a,b,c;  } Foo;//the initialize functionInitializeFoo(Foo* const foo){   foo->a = x; //derived here based on other data   foo->b = y; //derived here based on other data   foo->c = z; //derived here based on other data}//initializing the structure  Foo foo;InitializeFoo(&foo);I've gotten some push back trying to initialize my structs like this:  //the structuretypedef struct{  int a,b,c;  } Foo;//the initialize functionFoo ConstructFoo(int a, int b, int c){   Foo foo;   foo.a = a; //part of parameter input (inputs derived outside of function)   foo.b = b; //part of parameter input (inputs derived outside of function)   foo.c = c; //part of parameter input (inputs derived outside of function)   return foo;}//initialize (or construct) the structureFoo foo = ConstructFoo(x,y,z);Is there an advantage to one over the other?Which one should I do, and how would I justify it as a better practice?  
Should I initialize C structs via parameter, or by return value?
c;coding style;constructors;initialization
In the 2nd approach you will never have a half-initialised Foo. Putting all the construction in one place seems a more sensible, and obvious place.But... the 1st way isn't so bad, and is often used in many areas (there's even a discussion of the best way to dependency-inject, either property-injection like your 1st way, or constructor injection like the 2nd). Neither is wrong.So if neither is wrong and the rest of the company uses approach #1, then you should be fitting in with the existing codebase and not trying to mess it up by introducing a new pattern. This is really the most important factor at play here, play nice with your new friends and don't try to be that special snowflake who does things differently.