C secp256k1: What is the purpose of the idiom '(void)data;'?

0

The following code is contained in the file secp256k1.c:

static void 
default_illegal_callback_fn( 
  const char* str, 
  void* data) 
{
  (void)data;
  fprintf(stderr, "[libsecp256k1] illegal argument: %s\n", str);
  abort();
}

Could someone explain the purpose of the line (void)data;? I am pretty sure there is one, but I can't figure out what it is :(

Sven Williamson

Posted 2017-06-03T16:06:02.643

Reputation: 1 314

Answers

4

Without (void) data;, gcc will complain about data being an unused variable. This is used throughout the codebase, especially for context objects, to deal with parameters which are required for API/consistency reasons but not actually needed.

Andrew Poelstra

Posted 2017-06-03T16:06:02.643

Reputation: 1 050

Many compilers also have some variant of __unused(data);, which, if available, is preferred.abelenky 2017-06-03T18:33:45.567

2

Notice that without this cast, data would be unused in this function. This is probably here for the purpose of preventing compiler warnings about unused variables, while keeping the argument in the function signature.

Jestin

Posted 2017-06-03T16:06:02.643

Reputation: 8 339

yes you are right, the cast (void) is necessary to avoid gcc's warning. Thank you !Sven Williamson 2017-06-03T16:17:12.027