Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

When using va_start(), va_arg() and va_end() to read parameters passed to a method, is there a way to count how many arguments there are?

According to the man page if you call va_arg() too many times you get "random errors":

If there is no next argument, or if type is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), random errors will occur.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
766 views
Welcome To Ask or Share your Answers For Others

1 Answer

No. a Variable Argument function (such as printf), must "know" when to stop looking for more arguments.

printf knows by the number of %d, %s and other symbols in its format string.

Other functions sometimes use Sentinel values:

sumValues(1, 3, 5, 7, 6, 9, -1); // will add numbers until it encounters a -1

Other functions may have the number of parameters stated up front:

AddNames(4, "Bill", "Alice", "Mike", "Tom");

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...