Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  fnptr.c

  Sprache: C
 

/*
 * Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
 * Copyright (c) 2022 Apple Inc. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */


typedef unsigned word_t;
typedef unsigned (* unop_u_ptr_t)(word_t object);

unsigned odd_disp(unsigned);
unsigned even_disp(unsigned);

static const unop_u_ptr_t odd_even_dispatcher[2] = {
 odd_disp,
 even_disp
};

unsigned call_even_disp(word_t n) {
 /* return even_disp(n);*/
 unsigned f = 0;
 if (n > 22) {
   f = 1;
 }
 return (odd_even_dispatcher[f])(n - 1);
}

unsigned call1_even_disp(word_t n) {
  return call_even_disp(n);
}

unsigned odd_disp(word_t n) {
  return call1_even_disp(n - 1);
}

unsigned even_disp(word_t n) {
  return call1_even_disp(n + 1);
}

/*
unsigned even_disp(word_t n) {
  if (n==0) {
    return 1;
  } else {
  return (odd_even_dispatcher[0])(n - 1);
  } 
}

unsigned odd_disp(word_t n) {
  if (n==0) {
    return 0;
  } else {
    if (n > 42) {
      return (odd_even_dispatcher[1])(n - 1);
    } else {
      return (call_even_disp(n - 1));
    }
  } 
}
*/


void loop(void) {loop();}

unsigned binop_u(unsignedunsigned);
typedef typeof(binop_u) binop_u_t;

int binop(intint);
int unop(int);
typedef typeof(binop) binop_t;
typedef typeof(unop) unop_t;

int gi = 0;
unsigned gu = 2;

typedef struct object {
  binop_t * binop;
  unop_t * unop;
} object_t;

typedef struct object_u {
  binop_u_t * binop_u;
  unop_u_ptr_t unop_u;
} object_u_t;


int const_arg(const int c) {
  while (1) {
    if (c <= 0) { 
      return (c + 1);
    } else {
      return (c + 2);
   } 
 }
}

int fac(int n) {
 if (n <= 0) {
   return 0;
else {
   return (fac (n - 1));
}
}

unsigned odd(unsigned);
unsigned even(unsigned n) {
  unsigned m = n;
  if (n==0) {
    return 1;
  } else {
    return odd(n - 1);
  } 
}

unsigned odd(unsigned m) {
  unsigned n = m;
  if (m==0) {
    return 0;
  } else {
    return even(m - 1);
  } 
}

int call_fac(int n) {
  return fac(n);
};

int silly(int n) {
 if (n <= 0) {
   exit(1);
 }
 return 0;
}

int call_silly(int n) {
  return (silly(n));
}


int add(int n, int m) {
  int k = gi;
  return n + m;
}

int minus(int n, int m) {
  return n - m;
}

int mul(int n, int m) {
  return n * m;
}

int inc(int n) {
  return n + 1;
}

int dec(int n) {
  return n - 1;
}

unsigned uinc(unsigned n) {
  return n + 1;
}

unsigned udec(unsigned n) {
  return n - 1;
}

unsigned add_u(unsigned n, unsigned m) {
  return n + m;
}

unsigned add_gu(unsigned n, unsigned m) {
  return n + m + gu;
}

unsigned call_add_u(unsigned n, unsigned m) {
  return add_u(n, m);
}


void inc_gu(void) {
 gu = gu + 1;
}

unsigned inc_u(unsigned n) {
  return n + gu;
}


static const binop_t* add_p = add;
static const binop_u_t* add_u_p = add_u;

int call_add(int i, int j) {
  return add (i, j);
}

int indirect_call_add(int i, int j) {
  int k = 0;
  k = add_p(i, j);
  return k;
}

unsigned indirect_call_add_u(unsigned i, unsigned j) {
  return add_u_p(i, j);
}

enum type {ZERO, ONE, TWO, THREE, FOUR, TYPE_MAX};

static const object_t dispatcher[TYPE_MAX] = {
 [ZERO] = {.binop = add, .unop = inc},
 [ONE] = {.binop = minus, .unop = dec},
 [TWO] = {.binop = mul, .unop = dec},
 [THREE] = {.binop = minus, .unop = inc},
 [FOUR] = {.binop = 0, .unop = 0
};

int call_binop(unsigned char i, int n, int m) {
  int r = 0;
  if (dispatcher[i].binop != 0) {
  r = dispatcher[i].binop(n, m);
  }
  return (r);
};


static const object_u_t dispatcher_u[2] = {
 {.binop_u = add_u, .unop_u = inc_u},
 {.binop_u = add_gu, .unop_u = inc_u}
};

unsigned call_binop_u(int i, unsigned n, unsigned m) {
  unsigned r = 0;
  r = dispatcher_u[i].binop_u(n, m);
  return (r);
};


int parameter_call(binop_t *p, int n, int m) {
  return(p(n,m));
}

int parameter_call_add(int n, int m) {
  return parameter_call(add, n, m);
}

int nested_parameter_call(binop_t *q, int n, int m) {
  return(parameter_call(q, n, m));
}

unsigned f(unsigned x) { return x + 1; }
unsigned g(unsigned);

void callthem(void)
{
  g((int)f);
  g((int)&f);
}

unsigned global1, global2;

void callable1(void)
{
  global1++;
}

void callable2(void)
{
  global2++;
}

int voidcaller(void (*pfn)(void))
{
  pfn();
  return 2;
}

int callvoidcaller(void)
{
  return voidcaller(callable1);
}

int intcallable1(void)
{
  return 3;
}

int intcallable2(void)
{
  return 4;
}

int intcaller(int (*ipfn)(void))
{
  return ipfn();
}

int callintcaller(void)
{
  return intcaller(intcallable2);
}


int call_object_binop_return(object_t * p, int x, int y)
{
  __attribute__((calls(add, minus, mul))) return p->binop(x,y);
}

int call_object_binop_assign(object_t * p, int x, int y)
{
  int t1 __attribute__((calls(minus, mul))) = p->binop(x,y);
  int t2 __attribute__((calls(minus, mul))) = p->binop(x,y);
  return (t1 + t2);
}

int call_object_binop_emb(object_t * p, int x, int y)
{
  int t  __attribute__((calls(add, minus))) = add ( p->binop(x,y), p->binop(x,y)) ;
  return (t + x + y);
}



typedef enum {
 Success,
 Error 
Return;

typedef unsigned (*myop_t_ptr)(unsigned arg1);
typedef struct object1 object1_t;

struct object1 {
  myop_t_ptr unop;
};

unsigned call_object0(const object1_t *  p)
{
  unsigned n = 0;
  [[calls(odd, even, odd_disp, even_disp)]] n  = p->unop(0);
  return n;
}

unsigned call_object1(const object1_t *  p)
{
  Return n = 0;
  [[calls(odd, even, odd_disp, even_disp)]] n = p->unop(0);
  return n;
}

void touch_types (void) {
  object1_t x;
}


Messung V0.5 in Prozent
C=86 H=99 G=92

¤ Dauer der Verarbeitung: 0.20 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge