lindquist@270: extern(C) int printf(char*, ...); lindquist@270: lindquist@1: int return_six() lindquist@1: { lindquist@1: return 6; lindquist@1: } lindquist@1: lindquist@1: int add_int(int a, int b) lindquist@1: { lindquist@1: return a+b; lindquist@1: } lindquist@1: lindquist@1: int sub_int(int a, int b) lindquist@1: { lindquist@1: return a-b; lindquist@1: } lindquist@1: lindquist@1: alias int function(int,int) binfn_t; lindquist@1: lindquist@1: int binop_int(binfn_t op, int a, int b) lindquist@1: { lindquist@1: return op(a,b); lindquist@1: } lindquist@1: lindquist@1: binfn_t get_binop_int(char op) lindquist@1: { lindquist@1: binfn_t fn; lindquist@1: if (op == '+') lindquist@1: fn = &add_int; lindquist@1: else if (op == '-') lindquist@1: fn = &sub_int; lindquist@1: return fn; lindquist@1: } lindquist@1: lindquist@1: extern(C) float mul_float(float a, float b) lindquist@1: { lindquist@1: return a * b; lindquist@1: } lindquist@1: lindquist@1: void function_pointers() lindquist@1: { lindquist@1: int function() fn = &return_six; lindquist@1: assert(fn() == 6); lindquist@1: lindquist@1: binfn_t binfn = &add_int; lindquist@1: assert(binfn(4,1045) == 1049); lindquist@102: lindquist@1: assert(binop_int(binfn, 10,656) == 666); lindquist@102: lindquist@1: binfn = get_binop_int('+'); lindquist@1: assert(binop_int(binfn, 10,100) == 110); lindquist@1: binfn = get_binop_int('-'); lindquist@1: assert(binop_int(binfn, 10,100) == -90); lindquist@102: lindquist@1: { lindquist@1: auto ffn = &mul_float; lindquist@1: float ftmp = mul_float(2.5,5); lindquist@1: assert(ftmp == 12.5); lindquist@1: assert(ftmp > 12.49 && ftmp < 12.51); lindquist@1: } lindquist@1: } lindquist@1: lindquist@1: void main() lindquist@1: { lindquist@1: printf("Function pointer test\n"); lindquist@1: function_pointers(); lindquist@1: printf(" SUCCESS\n"); lindquist@1: }