• C

Pure C - function with optional arguments only

Hi,

I want to declare a function, which has no required parameters, but may have optional, and do it in pure C.

It's simple for functions having at least one parameter:
   void my_func( char *sFirst, ... );
and then accessing the optional using arg_list.

I want to define something like
   void my_func( ... );
but it's not valid :(


I'll appreciate your help.
LVL 5
migoEXAsked:
Who is Participating?
 
mtmikeCommented:
You can declare the function with an empty argument list, eg

void myfunc();

In C (not C++) this functions takes any number of arguments. The above means "arguments are still unspecified". You can specify the arguments later on when defining the function.

The above is also the reason that functions without arguments should be defined as

void myfunc(void);
0
 
sunnycoderCommented:
man 3 getopt

something like
while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF)
should serve your purpose

the above line of code is from syslogd source code
0
 
AjarCommented:
hey you can always declare a pointer to a function without no args e.g


void ( * function)();

void  a_function_implementation(int  param1);
{
   // The param may not have been passed so the question is how
  // do you intend to find out wether a param has been passed or not;
  puts("INSIDE THE FUNCITON ");
}

int main(int argc,char* argv[])
{
    function = a_function_implementation;
    function();
}
0
Firewall Management 201 with Professor Wool

In this whiteboard video, Professor Wool highlights the challenges, benefits and trade-offs of utilizing zero-touch automation for security policy change management. Watch and Learn!

 
migoEXAuthor Commented:
There is 1 problem left:

I want this function to be exported, and used by "external" functions. If in my H file I declare the function without parameters, the caller won't be able to compile a code, which is passing parameter. And vise versa - if I define it with parameter, a call without passing parameters won't compile.

PS: I'm not sure it's possible :)  but may be I'm missing some solution
0
 
sunnycoderCommented:
Even I would be interested in the solution if this was possible ...
0
 
migoEXAuthor Commented:
Thanks, mtmike!

That's exactly what I was looking for :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.