What are variadic functions (va_list) in C?
HTML-код
- Опубликовано: 16 май 2024
- Source code can be found here:
code-vault.net/lesson/cc1b934...
===== Support us through our store =====
code-vault.net/shop
===== Check out our website =====
code-vault.net
===== Check out our Discord server =====
discord.code-vault.net
The last one in the playlist🎉🥳 Thank you so much!!!
I've used it to write a generic "err_exit" function, which basically takes a return error int as first parameter, then as much strings as needed. For example 'err_exit(1, "", SDL_GetError(), NULL);'
It makes my code cleaner (exit program in a single line and customized error message) and it's really helpful when a project gets big.
As you've mentioned, here the NULL last arg isn't a problem since variadic args are strings. Very handy C functionality if you treat it carefully.
Thank you for your amazing videos
Hi very good explanation of the topic. Learned so much from your channel.
Thanks a lot for the Explanation
Informative. Thank you!
best channel on C.
Great video
I didn't knew about the NULL technique
lol the adds started exactly at the moment when he tried to compile with 10 iterations instead of 4 at 9:24
This was an undefined behaviour indeed
the most perfect explanation sofar
The C23 new syntax seems very useful, could you do a blog post or a follow up explaining that? Just a video idea
Thanks for the suggestion. I will look into it
Excelent video!!. congrats from Argentina!!. What is it argument promotion in variadic functions?
That is quite a complex topic which I will cover in a video. The basic idea is that parameters for variadic functions are treated as certain data types by default
tricky. good effort.
Hi! Interesting video. You have been asking for content ideas in the past, so maybe there is something for you in here: there appears to be almost no content about testing in C. Or maybe it is just really hard to dig up for me. I barely know where to start, especially since all content send to focus on C++ and Visual Studio appears to have a dislike for C in general. Also, maybe how far can we emulate object oriented programming or functional programming in C? And in the same direction procedural programing with C. Either way I'll keep watching these C videos until I move on. Thanks a lot!
Thanks for the suggestions. I have dabbled in automated testing but not in C specifically (I'll have to do some research). And regarding emulating OOP in C... it was always in my mind since it's a great way of learning the basics of OOP and how it's a paradigm that can be used in almost any language
Very informative. Can you make a video on opaque pointer in c.
I will look into it
I'd like to have a mentor like u!!
Having 0 in the list while using the NULL method could be troublesome for embedded design - the hardware may not behave well or the robot arm may grab the wrong object.
Is it possible to pass an int array instead sum({1,2,3}), where you have int sum(int args[]){...int count = sizeof(args);...}
I forgot about this.
In other languages it might be possible. In C you have to first declare and initialize an array before you pass it to the function
@@CodeVault ok, thx, reason also for va_list implementation and passing count. It is better then testing for NULL.
Hi! Is it possible to pass char array to parameters? i mean, can they be as variadic arguments?
You can pass any type of variables you want to va_list
Why not pass argc from your main into the function instead of a separate int count?
The argc value is the number of parameters passed to the executable
Did we know which video he referred to was about not using the null terminator and the number of elements?
There's no video about that. I recommended this as a homework, but I can help with that if you need it
nice, so how come printf does not need count? ok, that is the homework ;-)
Exactly. Hint: It might have to do with those pesky %d and %s you need to specify to printf
@@CodeVault well you need to count how many % that specify the format no ?
@@belayoub6055 Exactly
I wouldn't recommend using the last trick you showed, as the code will return bad results on some inputs (0s spell trouble when comparing to NULL).
Try this main on your code:
int main() {
printf("A list of stuff: %d
", sum(1,2,3,4,5,6,0,999, NULL));
return 0;
}
You will get the expected (by me) 21, and ignore the 999.
Yeah, one might say this is an edge case, but I wouldn't.
I fully agree. That's what I warned people about in the video. It works well if you pass strings (or other pointer types) for example