Partial function types

Liste des GroupesRevenir à l c 
Sujet : Partial function types
De : tr.17687 (at) *nospam* z991.linuxsc.com (Tim Rentsch)
Groupes : comp.lang.c
Date : 22. May 2024, 07:15:38
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <86zfsiv345.fsf_-_@linuxsc.com>
References : 1 2 3 4 5 6 7
User-Agent : Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
[I am responding to a post in comp.lang.c++, but the subject is
C, so the response is directed to comp.lang.c.]

Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:

wij <wyniijj5@gmail.com> writes:
[...]
>
typedef int (*ptr)();  // ptr is pointer to int function
int H(ptr x, ptr y);
int D(ptr x)
{
  int Halt_Status = H(x, x);
  if (Halt_Status)
    HERE: goto HERE;
  return Halt_Status;
}
>
int main()
{
  H(D,D);
  return 0;
}
>
The code above does not compile:
>
Yes, it does (as you acknowledge in a later post).
>
This:
    typedef int (*ptr)();
defines "ptr" as an alias for a type that can be described in English
as "pointer to function returning int".  The empty parentheses
indicate that the function takes an unspecified but fixed number
and type(s) of arguments;  this is an old-style declaration.  [...]
>
The function H is declared but not defined.  [...]

I'll note that the code (declares and) defines the function D,
but never calls it.  The address of D is passed to H, but without
a definition of H we can't guess what it does with that address.

All good up to this point.

It's possible to rewrite the code to (a) avoid the use of old-style
function declarations [...]

Not without radically altering the code.  Because D is passed
as an argument to H, and because of how H and D are declared,
the type of (the address of) D has to match the type of D's
first parameter.  It isn't possible to do this in C without
resorting to a partial function type somewhere (because the
type of D is infinitely recursive).

There are other ways to work around this problem, for example
involving having a pointer-to-function member in a struct,
but that would entail changing either the declarations or
the call of H() with D as an argument, which seems to be
stretching the bounds of "rewrite the code".

The code as presented is a valid C *translation unit*, but it
is not a valid *program*,

It might be better to say it's a valid partial program, but not
a complete program.

and it has no behavior.

It doesn't have behavior in the sense that it doesn't do anything.
It does have behavior in the sense that the C standard prescribes
a meaning for the declarations and definitions given.  I believe
the C standard uses the term "behavior" in both of those senses.

Date Sujet#  Auteur
18 May 24 * Can someone please verify the execution trace of this?137olcott
19 May 24 +- Re: Can someone please verify the execution trace of this?1Richard Damon
19 May 24 +* Re: Can someone please verify the execution trace of this?3Sam
19 May 24 i`* Re: Can someone please verify the execution trace of this?2olcott
19 May 24 i `- Re: Can someone please verify the execution trace of this?1jak
19 May 24 +* Re: Can someone please verify the execution trace of this?2Rosario19
19 May 24 i`- Re: Can someone please verify the execution trace of this?1olcott
19 May 24 +* Re: Can someone please verify the execution trace of this?127Bonita Montero
19 May 24 i`* Re: Can someone please verify the execution trace of this?126olcott
19 May 24 i +- Re: Can someone please verify the execution trace of this?1Richard Damon
20 May 24 i `* Re: Can someone please verify the execution trace of this?124Bonita Montero
20 May 24 i  `* Re: Can someone please verify the execution trace of this?123olcott
20 May 24 i   +* Re: Can someone please verify the execution trace of this?54Bonita Montero
20 May 24 i   i`* Re: Can someone please verify the execution trace of this?53olcott
20 May 24 i   i +* Re: Can someone please verify the execution trace of this?44Bonita Montero
20 May 24 i   i i`* Re: Can someone please verify the execution trace of this?43olcott
20 May 24 i   i i `* Re: Can someone please verify the execution trace of this?42Bonita Montero
20 May 24 i   i i  `* Re: Can someone please verify the execution trace of this?41olcott
20 May 24 i   i i   `* Re: Can someone please verify the execution trace of this?40Bonita Montero
20 May 24 i   i i    `* Re: Can someone please verify the execution trace of this?39olcott
20 May 24 i   i i     +* Re: Can someone please verify the execution trace of this?2Richard Harnden
20 May 24 i   i i     i`- Re: Can someone please verify the execution trace of this?1olcott
20 May 24 i   i i     `* Re: Can someone please verify the execution trace of this?36Chris M. Thomasson
20 May 24 i   i i      `* Re: Can someone please verify the execution trace of this?35olcott
20 May 24 i   i i       `* Re: Can someone please verify the execution trace of this?34Chris M. Thomasson
20 May 24 i   i i        +* Re: Can someone please verify the execution trace of this?13olcott
20 May 24 i   i i        i`* Re: Can someone please verify the execution trace of this?12Chris M. Thomasson
20 May 24 i   i i        i `* Re: Can someone please verify the execution trace of this?11olcott
20 May 24 i   i i        i  +- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i i        i  +* Re: Can someone please verify the execution trace of this?3Chris M. Thomasson
20 May 24 i   i i        i  i`* Re: Can someone please verify the execution trace of this?2olcott
20 May 24 i   i i        i  i `- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i i        i  `* Re: Can someone please verify the execution trace of this?6Chris M. Thomasson
20 May 24 i   i i        i   `* Re: Can someone please verify the execution trace of this?5olcott
20 May 24 i   i i        i    `* Re: Can someone please verify the execution trace of this?4Chris M. Thomasson
20 May 24 i   i i        i     `* Re: Can someone please verify the execution trace of this?3olcott
20 May 24 i   i i        i      `* Re: Can someone please verify the execution trace of this?2Chris M. Thomasson
20 May 24 i   i i        i       `- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i i        `* Re: Can someone please verify the execution trace of this?20Chris M. Thomasson
20 May 24 i   i i         `* Re: Can someone please verify the execution trace of this?19olcott
20 May 24 i   i i          `* Re: Can someone please verify the execution trace of this?18Chris M. Thomasson
20 May 24 i   i i           `* Re: Can someone please verify the execution trace of this?17olcott
20 May 24 i   i i            `* Re: Can someone please verify the execution trace of this?16Chris M. Thomasson
20 May 24 i   i i             `* Re: Can someone please verify the execution trace of this?15olcott
20 May 24 i   i i              `* Re: Can someone please verify the execution trace of this?14Chris M. Thomasson
20 May 24 i   i i               `* Re: Can someone please verify the execution trace of this?13olcott
20 May 24 i   i i                `* Re: Can someone please verify the execution trace of this?12Chris M. Thomasson
20 May 24 i   i i                 +- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i i                 `* Re: Can someone please verify the execution trace of this?10olcott
20 May 24 i   i i                  `* Re: Can someone please verify the execution trace of this?9Chris M. Thomasson
20 May 24 i   i i                   `* Re: Can someone please verify the execution trace of this?8Chris M. Thomasson
20 May 24 i   i i                    `* Re: Can someone please verify the execution trace of this?7olcott
20 May 24 i   i i                     +* Re: Can someone please verify the execution trace of this?5Chris M. Thomasson
20 May 24 i   i i                     i`* Re: Can someone please verify the execution trace of this?4olcott
20 May 24 i   i i                     i `* Re: Can someone please verify the execution trace of this?3Chris M. Thomasson
20 May 24 i   i i                     i  +- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i i                     i  `- Re: Can someone please verify the execution trace of this?1olcott
20 May 24 i   i i                     `- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
20 May 24 i   i `* Re: Can someone please verify the execution trace of this?8Fred. Zwarts
20 May 24 i   i  `* Re: Can someone please verify the execution trace of this?7olcott
20 May 24 i   i   +* Re: Can someone please verify the execution trace of this?2Paavo Helde
20 May 24 i   i   i`- Re: Can someone please verify the execution trace of this?1olcott
20 May 24 i   i   `* Re: Can someone please verify the execution trace of this?4Bonita Montero
20 May 24 i   i    `* Re: Can someone please verify the execution trace of this?3olcott
21 May 24 i   i     `* Re: Can someone please verify the execution trace of this?2Fred. Zwarts
21 May 24 i   i      `- Re: Can someone please verify the execution trace of this?1olcott
21 May 24 i   +* Re: Can someone please verify the execution trace of this?35Sam
21 May 24 i   i`* Re: Can someone please verify the execution trace of this?34olcott
21 May 24 i   i `* Re: Can someone please verify the execution trace of this?33Sam
21 May 24 i   i  +* Re: Can someone please verify the execution trace of this?30olcott
21 May 24 i   i  i`* Re: Can someone please verify the execution trace of this?29Sam
21 May 24 i   i  i `* Re: Can someone please verify the execution trace of this?28olcott
21 May 24 i   i  i  `* Re: Can someone please verify the execution trace of this?27Chris M. Thomasson
21 May 24 i   i  i   `* Re: Can someone please verify the execution trace of this?26olcott
21 May 24 i   i  i    +- Re: Can someone please verify the execution trace of this?1Chris M. Thomasson
21 May 24 i   i  i    `* Re: Can someone please verify the execution trace of this?24Sam
22 May 24 i   i  i     `* Can D correctly simulated by H reach its own line 06 and halt?23olcott
22 May 24 i   i  i      +* Re: Can D correctly simulated by H reach its own line 06 and halt?7Chris M. Thomasson
22 May 24 i   i  i      i`* Re: Can D correctly simulated by H reach its own line 06 and halt?6Chris M. Thomasson
22 May 24 i   i  i      i `* Re: Can D correctly simulated by H reach its own line 06 and halt?5olcott
22 May 24 i   i  i      i  `* Re: Can D correctly simulated by H reach its own line 06 and halt?4Chris M. Thomasson
22 May 24 i   i  i      i   `* Re: Can D correctly simulated by H reach its own line 06 and halt?3olcott
22 May 24 i   i  i      i    `* Re: Can D correctly simulated by H reach its own line 06 and halt?2Chris M. Thomasson
22 May 24 i   i  i      i     `- Re: Can D correctly simulated by H reach its own line 06 and halt?1olcott
22 May 24 i   i  i      `* Re: Can D correctly simulated by H reach its own line 06 and halt?15Sam
22 May 24 i   i  i       +* Re: Can D correctly simulated by H reach its own line 06 and halt?5olcott
22 May 24 i   i  i       i`* Re: Can D correctly simulated by H reach its own line 06 and halt?4Sam
22 May 24 i   i  i       i `* Re: Can D correctly simulated by H reach its own line 06 and halt?3olcott
22 May 24 i   i  i       i  `* Re: Can D correctly simulated by H reach its own line 06 and halt?2Sam
22 May 24 i   i  i       i   `- Re: Can D correctly simulated by H reach its own line 06 and halt?1Tim Rentsch
22 May 24 i   i  i       `* Re: Can D correctly simulated by H reach its own line 06 and halt?9olcott
22 May 24 i   i  i        +* Re: Can D correctly simulated by H reach its own line 06 and halt?3olcott
22 May 24 i   i  i        i`* Re: Can D correctly simulated by H reach its own line 06 and halt?2tTh
22 May 24 i   i  i        i `- Re: Can D correctly simulated by H reach its own line 06 and halt?1Chris M. Thomasson
22 May 24 i   i  i        `* Re: Can D correctly simulated by H reach its own line 06 and halt?5Sam
22 May 24 i   i  i         `* Re: Can D correctly simulated by H reach its own line 06 and halt?4Bonita Montero
22 May 24 i   i  i          `* Re: Can D correctly simulated by H reach its own line 06 and halt?3olcott
22 May 24 i   i  i           `* Re: Can D correctly simulated by H reach its own line 06 and halt?2Sam
22 May 24 i   i  i            `- Re: Can D correctly simulated by H reach its own line 06 and halt?1Chris M. Thomasson
21 May 24 i   i  `* Re: Can someone please verify the execution trace of this?2Chris M. Thomasson
21 May 24 i   i   `- Can D simulated by any H possibly reach its own line 06 and halt?1olcott
21 May 24 i   +* Re: Can someone please verify the execution trace of this?31olcott
22 May 24 i   `* Partial function types2Tim Rentsch
20 May 24 `* Re: Can someone please verify the execution trace of this?3Marcel Mueller

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal