#ifndef CDECL_HEADER_FILE #define CDECL_HEADER_FILE /* * Define macros to specify the standard C calling convention * The macros are designed so that they will work with all * supported C/C++ compilers. * * To use define your function prototype like this: * * return_type PRE_CDECL func_name( args ) POST_CDECL; * * For example: * * int PRE_CDECL f( int x, int y) POST_CDECL; */ #if defined(__GNUC__) #define PRE_CDECL #define POST_CDECL __attribute__((cdecl)) #else #define PRE_CDECL __cdecl #define POST_CDECL #endif #endif #include <stdio.h> #include <stdlib.h> float compute_derivative(float (*f)(float),float x, float epsilon); int PRE_CDECL asm_main( void ) POST_CDECL; float f(float x) { return (x*x + 10.0/x); } int main(int argc, char **argv) { float derivative; float x, epsilon; if (argc != 3) { fprintf(stderr,"Usage: %s <x> <epsilon>\n",argv[0]); exit(1); } if (sscanf(argv[1],"%f",&x) != 1) { fprintf(stderr,"Invalid command-line argument '%s'\n",argv[1]); exit(1); } if (sscanf(argv[2],"%f",&epsilon) != 1) { fprintf(stderr,"Invalid command-line argument '%s'\n",argv[2]); exit(1); } derivative = compute_derivative(f, x, epsilon); printf("Derivative of function f at point %f is %.5f\n",x,derivative); exit(0); }