stacker
stacker

Reputation: 49

Why do C written libraries use so many structs?

I've looked to some open source Libraries in some places. And, I've realized which that Libraries are basically a great stack of structs. I've seen few methods.

Why does C written libraries uses so much structs? What's the basis behind this? This, for me, looked like a attempt to simulate object orientation, 'cause a fast searching told me that each struct is "instantiated" by the using program to make something, per example, in some Desktop enviroments for linux that I've seen that each window was a struct in the used GUI library.

Anyway, the question is that.

Upvotes: 2

Views: 261

Answers (4)

John Bode
John Bode

Reputation: 123598

One, it keeps the APIs clean. Instead of passing N separate arguments to a function, you pass a single argument containing N members.

Two, it allows the library to hide implementation details from the programmer. For example, the C FILE type abstracts away some details of stream I/O, details which vary from implementation to implementation. We don't need to know those details, so they're not exposed to us; we just use the FILE type to pass that information around.

Upvotes: 1

Pala
Pala

Reputation: 2201

Structures are useful while retrieving data using a pointer. Because single pointer is enough for complete bunch of data with in a structure.

Upvotes: 2

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385405

With or without object orientation, structures are a useful way to group aggregate data into a single symbol. You can copy the structure wherever you like without having to write out all the members each time, and this makes the structure easier to change if you have to.

It also makes it easier to reference certain members using pointer arithmetic, if you're careful (see sockaddr).

Same argument as with arrays.

Simply put, there's no reason not to use structures.

Upvotes: 2

John Zwinck
John Zwinck

Reputation: 249642

Structs are a great way to organize data. And data is fundamental, as Fred Brooks knew decades ago:

Show me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowcharts; they'll be obvious.

Object-oriented programming doesn't have to be merely simulated in C, it can be realized. For example, did you know that inside your structs you can store function pointers which operate on those same structs, and then you are a little bit closer to C++'s classes?

Also consider extensibility: even a function taking many arguments may be improved by taking a single struct, because then its signature does not need to change when a new argument is added.

Finally, C does not have multiple return values from a single function call. But it can return a struct, which is about the same thing. C is a lot about building your own tools from the raw language, and being able to stash a bunch of related data and/or functions together in one place is a good building block.

Upvotes: 3

Related Questions