lagache@picsou.inria.fr (Edouard Lagache) (07/05/90)
Hello "C" hackers of the world! A while back I sent out a question on how to figure out the number of arguments in a function that can take a variable number of arguments. I got a lot of replies (Thanks to everyone who did reply!!!) Fortunately for me they fall into two main groups: KISS-I (Keep It Simple Stupid!): Simply define the first argument to be the number of other arguments. Assuming the programmer using the function can count (even with math and reading scores the way it is . . .), it shouldn't be a problem, and that produces good efficient code. However, that isn't quite as bullet proof as is theoretically desirable. Still trusting a "C" programmer isn't as bad as trusting a user to do the right thing. After all, "C" programmers are people like us (do you thrust yourself? . . . No!) KISS-II: Use the last argument of a sentinel. That's okay too except that whatever argument you use better not ever be a real argument. Also that would not have solved my problem, since I needed the number of arguments. To have done what I wanted, I would have needed to run through the list twice which I wasn't sure I could do. ( Now why did I come with this stuff? ) Conjecture or fact? Now for the interesting part. At least two people told me that the ANSI standard guarantees that I can run through the argument list twice. To quote Stephen Clamage (message of Mon Jul 2 17:49:40 1990): > If you have an ANSI-compatible implementation of C, handling of variable > argument lists is completely portable, including scanning the list more > than once. I have no doubt that the standard says that, I'm curious to know how many implementations actually support it. Steve sent me some test code that I'll be glad to distribute to anyone wanting to explore this issue. Indeed if people report their results, I'll tally up a list of the compilers that pass and fail this interesting test of ANSI compatibility. Happy "C" hacking!! Edouard Lagache INRIA, Sophia Antipolis - FRANCE. (for the summer) P.S. What about our "C" compiler? We don't even have a 'stdargs.h' file! P.P.S. Thanks for all the nice greetings from all over the world! (It's a small world after all! :-)