Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > comp.lang.c > #396071

Re: function pointer question

From Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups comp.lang.c
Subject Re: function pointer question
Date 2026-01-02 02:52 -0800
Organization None to speak of
Message-ID <878qeguw0p.fsf@example.invalid> (permalink)
References <10j7rs6$7c9e$1@dont-email.me>

Show all headers | View raw


Michael Sanders <porkchop@invalid.foo> writes:
> i have:
>
> void moo(char HISTORY[][64], int hst_len, int invalid, const char *gme_msg)
>
> void mastermind(char HISTORY[][64], int hst_len, int invalid, const char *gme_msg)
>
> to use either i have:
>
> void (*render)(char [][64], int, int, const char *) = MOO ? moo : mastermind;
>
> my multi-part question:
>
> why is void required for the function pointer?

Every function has a type.  Every function pointer has a type.  For a
function pointer to point to a function, it must have type "pointer to
blah", where "blah" is the type of the function.

A function type includes information about the type of the function's
result and the types of its parameters.  The type of both foo and
mastermind can be written as:

    void(char[]64], int, int, const char*)

> A: because both moo() & mastermind return void?

Yes.

> B: because every function must have a return type
>    *including function pointers*?

Functions and function pointers are of course distinct.  A function is
of function type.  A function pointer is of an object type, specifically
a pointer-to-function type.

Every pointer-to-function type is derived from a function type, and that
function type specifies the type returned by the function -- "void" in
this case.

> C: what about tyedef?

What about it?

You can define a typedef for the function type, which could make the
code a bit simpler.  (It's also common to define a typedef for a
pointer-to-function type, but I prefer to typedef the function type
itself.)

An example based on your code :

```
#include <stdio.h>

void moo(char HISTORY[][64], int hst_len, int invalid, const char *gme_msg) {
    puts("moo");
}

void mastermind(char HISTORY[][64], int hst_len, int invalid, const char *gme_msg) {
    puts("mastermind");
}

typedef void functype(char [][64], int, int, const char *);

int main(void) {
    for (int MOO = 0; MOO < 2; MOO ++) {
        functype *render = MOO ? moo : mastermind;
        printf("MOO is %s: ", MOO ? "true" : "false");
        render(NULL, 0, 0, "");
    }
}
```

The output :

```
MOO is false: mastermind
MOO is true: moo
```

(Incidentally, all-caps identifiers are most commonly used as macro
names, with FILE being a notable exception.)

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 07:24 +0000
  Re: function pointer question Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-01-02 09:04 +0000
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 14:42 +0000
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 14:45 +0000
  Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-02 02:52 -0800
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 14:43 +0000
      Re: function pointer question highcrew <high.crew3868@fastmail.com> - 2026-01-02 17:21 +0100
        Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-02 09:37 -0800
        Re: function pointer question Ben Bacarisse <ben@bsb.me.uk> - 2026-01-03 03:33 +0000
          Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-03 07:41 -0800
            Re: function pointer question Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-01-03 21:46 +0000
              Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-04 12:03 +0100
            Re: function pointer question Kaz Kylheku <046-301-5902@kylheku.com> - 2026-01-06 20:41 +0000
              Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-07 07:18 -0800
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-07 21:52 -0800
                Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-08 09:17 +0100
  Re: function pointer question Kaz Kylheku <046-301-5902@kylheku.com> - 2026-01-02 17:48 +0000
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 19:35 +0000
      Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-02 12:07 -0800
        Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-03 06:06 +0000
      Re: function pointer question Kaz Kylheku <046-301-5902@kylheku.com> - 2026-01-02 21:50 +0000
      Re: function pointer question Kaz Kylheku <046-301-5902@kylheku.com> - 2026-01-02 21:52 +0000
        Re: function pointer question "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-01-02 14:18 -0800
          Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-03 13:55 +0100
            Re: function pointer question "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-01-03 12:04 -0800
              Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-03 13:01 -0800
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-07 07:35 -0800
                Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-07 08:17 -0800
                Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-07 08:23 -0800
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-07 18:44 -0800
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-07 18:27 -0800
              Re: function pointer question Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-01-03 22:05 +0000
            Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-03 16:39 -0800
              Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-04 12:15 +0100
            Re: function pointer question Kaz Kylheku <046-301-5902@kylheku.com> - 2026-01-06 20:33 +0000
              Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-06 17:01 -0800
        Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-03 06:08 +0000
          Re: function pointer question "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-01-05 12:40 -0800
            Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 04:30 +0000
              Re: function pointer question "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-01-06 17:05 -0800
      Re: function pointer question James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-01-03 17:20 -0500
        Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-03 16:48 -0800
        Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-05 08:39 +0000
          Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 12:32 +0000
            Re: function pointer question highcrew <high.crew3868@fastmail.com> - 2026-01-06 13:59 +0100
              Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 13:57 +0000
              Re: function pointer question antispam@fricas.org (Waldek Hebisch) - 2026-01-06 14:50 +0000
                Re: function pointer question highcrew <high.crew3868@fastmail.com> - 2026-01-06 21:44 +0100
                Re: function pointer question scott@slp53.sl.home (Scott Lurndal) - 2026-01-06 22:08 +0000
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-07 05:59 -0800
                Re: function pointer question antispam@fricas.org (Waldek Hebisch) - 2026-01-07 09:25 +0000
                Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-07 11:37 +0100
            Re: function pointer question Michael S <already5chosen@yahoo.com> - 2026-01-06 15:47 +0200
              Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 14:01 +0000
            Re: function pointer question David Brown <david.brown@hesbynett.no> - 2026-01-06 15:55 +0100
              Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 16:44 +0000
            Re: function pointer question scott@slp53.sl.home (Scott Lurndal) - 2026-01-06 15:41 +0000
              Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 16:45 +0000
            Re: function pointer question James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-01-06 10:58 -0500
              Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-06 16:49 +0000
                Re: function pointer question James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-01-06 12:09 -0500
                Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-07 21:18 +0000
              Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-09 09:14 -0800
              Re: function pointer question Andrey Tarasevich <noone@noone.net> - 2026-01-10 19:17 -0800
                Re: function pointer question "James Russell Kuyper Jr." <jameskuyper@alumni.caltech.edu> - 2026-01-10 22:39 -0500
                Re: function pointer question Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-01-11 11:49 -0800
        Re: function pointer question James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-01-05 06:47 -0500
  Re: function pointer question James Kuyper <jameskuyper@alumni.caltech.edu> - 2026-01-02 14:03 -0500
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 19:41 +0000
  Re: function pointer question bart <bc@freeuk.com> - 2026-01-02 19:18 +0000
    Re: function pointer question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-01-02 11:43 -0800
    Re: function pointer question Michael Sanders <porkchop@invalid.foo> - 2026-01-02 19:44 +0000

csiph-web