I think this double-use is confusing. I'd prefer to wrap a more generic function, something like:

```c
static void submit_value (int cpu_num, int cpu_state, char const *type, value_t value);
static void submit_percent (int cpu_num, int cpu_state, gauge_t percent)
{
  value_t value;
  value.gauge = gauge;
  submit_value (cpu_num, cpu_state, "percent", value);
}
static void submit_derive (int cpu_num, int cpu_state, derive_t d)
{
  value_t value;
  value.derive = d;
  submit_value (cpu_num, cpu_state, "cpu", value);
}
```