ewx: (geek)
[personal profile] ewx

From time to time I and colleagues find ourselves extending some function in C in a way that requires extra arguments. Often this happens in a context where it's impractical to change all the callers (for instance, because some of them are in customer code) so the extended version of the function gets a new name and the original name just calls that with some default value of the new arguments.

For instance I might go from this:

int refine_glorp(glorp *g) {
  /* refinement */
}

…to this:

int refine_glorp(glorp *g) {
  return refine_glorp_ex(g, 0);
}

int refine_glorp_ex(glorp *g, int arg) {
  /* extended refinement, based on arg */
}

Is there a well-known name for this transformation?

A colleague who did this a week or so ago started out with 'decapitation' but changed his mind to 'recapitation' on the grounds that he was really adding a second head to the function rather than removing one. But neither of us knew if there was already a name for this.

(no subject)

Date: 2015-11-09 08:30 am (UTC)
From: [identity profile] bellinghman.livejournal.com
In C? Haven't a clue. But I'll note that it's quite a common pattern in C++, though there the overloaded function would have the same name as the original even as the original passes along its parameter.

(And I'm not aware of its name in C++ either)

(no subject)

Date: 2015-11-09 07:16 pm (UTC)
From: [identity profile] armb.livejournal.com
Or just add the new argument with a suitable default value in the declaration so existing calls remain valid.

(no subject)

Date: 2015-11-09 08:15 pm (UTC)
ext_8103: (Default)
From: [identity profile] ewx.livejournal.com
That's an ABI change though, limiting the contexts in which it will work a bit.

November 2025

S M T W T F S
      1
2345678
91011121314 15
1617 181920 2122
23242526272829
30      

Most Popular Tags

Expand Cut Tags

No cut tags