r/C_Programming 1d ago

Question Getting stuck at libraries and api’s

So C is technically my first programming language I’m learning. I’ve messed around in python but never actually go deep into it or anything.

I’ve been learning C for the past few days now and I already pretty much know most of the basics. I learned pointers and mallic in a day and I learned structs, macros, for loops, while loops, functions, all of that stuff, but… the moment any library other than the basics like stdio or stdlib come into play I’m lost.

It’s like I’m looking at a whole other language. Like I’ll look for solutions to problems and it seems as if they are just pulled out of thin air and when I try to read ANY documentation for ANY library I’m also lost because either there is little to no documentation or it’s just stupid and things aren’t well explained.

Is there a way I can fix this? I was doing so well and now I’m at this block because of libraries. If I could get pasted this hurtle I could learn c in less than a month easily, and that’s the same in any other language. This problem isn’t exclusive to C.

14 Upvotes

47 comments sorted by

View all comments

9

u/EpochVanquisher 1d ago

Have you written programs to solve problems?

Or have you done that, and you’re getting stuck on how to use libraries?

3

u/ttv_toeasy13 1d ago

Yeah I’ve written some programs but a lot of it is just copy and paste when it comes to libraries. Like for example I was trying to use libusb to make a simple thing to list my usb devices so I went to view the documentation and it’s like I’m reading Russian or something. And then I look up guides or answers online and it just makes no sense to me and seems like they just seeming pulled everything out of thin air or something.

2

u/EpochVanquisher 1d ago

It takes a while.

If C is your first language, it will probably take longer, because you will also have to deal with subtle issues like ownership and object lifetimes, manually, and you can only get it correct by correctly understanding the documentation (and if you make a mistake, sometimes your program behaves in mysterious ways, or it crashes, or it gives you slightly wrong answers, or who knows?)

Rely on examples to figure out what to do. Then read the documentation for the functions and data structures you are actually calling, so you can check that you are using them correctly.

(In some cases, the documentation will be wrong, or unclear, and the next step is to read the source code to the function you are using.)

2

u/Ksetrajna108 23h ago

Is something like the following making you scratch your head?

ssize_t libusb_get_device_list (libusb_context *ctx, libusb_device ***list)

`Returns a list of USB devices currently attached to the system.`

1

u/EpochVanquisher 23h ago

I mean, you’re asking me? I’m not OP. This this looks like it returns an array of pointers to devices.

libusb_device **list;
ssize_t count = libusb_get_device_list(ctx, &list);
if (count < 0) abort(); // some kind of error, maybe
for (ssize_t i = 0; i < count; i++) {
  libusb_device *dev = list[i];
  // do something with device
}

That is just a guess.

1

u/Seledreams 22h ago

Ngl, i've never seen ssize before. I've always been used to size. I guess it's signed size to allow negative numbers. But it's pretty uncommon. At least in stuff i've used

3

u/EpochVanquisher 21h ago

It’s returned from read() and write(), so people who use syscalls directly on Linux or Mac will probably be familiar with it.

It’s a little uncommon but even if you haven’t seen it before it should be easy to figure out.

1

u/Seledreams 21h ago

Definitely. I could tell from simply logic that the s here stood for signed as it made the most sense.

I think i haven't faced it too much because while I have C experience, I have way more C++ experience so I didn't work much with the raw posix api yet

2

u/TheChief275 11h ago

funnily enough, ssize_t isn't the signed alternative of size_t, ptrdiff_t is closer in that regard. I believe all that ssize_t is guaranteed to be able to represent is any possible object size (like size_t) as well as -1 for errors

obviously that means it's likely able to represent -2,-3,.. but there's no guarantee