我需要检查指针是否指向math.h函数

时间:2017-01-30 07:47:49

标签: c

有什么方法可以检查一个指针指向sin,cos,pow,log或exp的字符串是否是math.h头文件的一部分?

我需要实现以下伪代码:

if(ptr is equal to sin,cos,log,exp,pow)
  Execute code
else
  return 0;

1 个答案:

答案 0 :(得分:1)

  

有什么方法可以检查指针是否指向一个字符串   sin,cos,pow,log或exp是math.h头文件的一部分吗?

我假设你想根据字符串匹配调用不同的 math 函数。

您可以使用类似以下数据结构的内容来实现此目的:

// Make a generic function pointer, since no. of arguments differs
typedef double (*genericfptr)( );

struct FunMap
{
    const char* funName;
    genericfptr fptr;
    unsigned int nargs;
};

// Following could be used to get correct compatible types
typedef double (*OneArg)( double );
typedef double (*TwoArg)( double , double );

然后你可以创建一个数据结构来映射nfunctions和no。像:

这样的论点
struct FunMap fMap[ ] = 
{
    { "sin", sin, 1 },
    { "cos", cos, 1 },
    { "log", log, 1 },
    { "pow", pow, 2 },
    // ....
};

使用此功能地图表,您可以根据我们的字符串匹配调用函数。如下所示:

    if( strcmp( p, fMap[ j ].funName ) == 0 )
    {

        switch( fMap[ j ].nargs )
        {
            case 1:
            result = ((OneArg )fMap[ j ].fptr)( val1 );
            break;

            case 2:

            result = ((TwoArg )fMap[ j ].fptr)( val1, val2 );
            break;

            default:
            result = 0.0;
            //assert ( false );
            break;
        }
        break;
    }

Demo here