Question

If I'm writing abstract data types in C, are the functions written to perform actions on these data types and exposed in the interface (.h files) called functions, methods, or something yet completely different? I can't seem to find a constructive answer anywhere. Is method a C++ specific term?

Was it helpful?

Solution

Is method a C++ specific term?

A "method" is an object-oriented programming term, and refers to a function that is part of the namespace of an object. So you can create methods for objects in languages like C++, Java, Objective-C, etc. In C on the otherhand, you still have stand-alone functions, not methods.

Keep in mind that the "official" C++ term for a class method is a "member function", and is described in section 9.3 of the spec.

OTHER TIPS

I've always used "method" as a synonym for "member function", which implies C++ since C has no such thing.

On the other side of the coin however, one might argue that the role of foo_alter_state in:

struct foo {
  // implementation stuff;
}; 

void foo_alter_state(struct foo *self);

was still a method operating on foos, albeit free-standing. It's basically OOP in C, but implemented by hand.

This perspective might be particularly true if struct foo; was only ever declared in headers, but not defined publicly anywhere.

Methods are functions associated with a class.

Since classes don't exist in C, everything is technically a function.

Method is typically used to describe "functions" that are part of a class in OOP. Functions are just that - functions, not part of a class.

In the .h file I'd call them "function declarations" and in the .c I'd call them "function implementations" ... I'm no expert though, just my .02.

Strictly speaking a function is an operation that gives an output for a given input. Whereas a method is a function bound to a type. C only has functions, I don't think you think any different.

But if you are implementing an ADT by, for example, putting function pointers in a struct (to functions that take a context pointer to the struct instance), so that you're mimicking an object with methods, then I see no reason to call them "methods implemented as functions".

I don't think this is a particularly useful distinction to make, but in general, you'd call them functions because the word method implies a whole bunch of OOP stuff that C doesn't provide. Like the following:

Methods have the special property that at runtime, they have access to data stored in an instance of the class (or class instance or class object or object) they are associated with and are thereby able to control the state of the instance.

But I've routinely heard folks who grew up on Java refer to C functions as methods and I've never once been confused about what they meant. Not even a little bit.

You might, however, want to make the following (loose) distinctions:

  • A procedure is a block of code that does something

  • A function is a procedure that associates one or more inputs with an output

  • A method is a procedure that belongs to some class or an instance of that class

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top