0

これが関数です(ロジックがかなり明白であることを願っています)。

x を '<' または '>' 演算子の 1 つとし、a と b を項とします。

int rationalCheck(x, a, b){

    if ( x == '<' && a < b && b < a ){
        printf( "a is less than b\n" );
    }

    if ( x != '>' && a > b && b > a ){
        printf( " a is greater than b\n" );
    }

    return 0;
}

関数への入力は次のようになります。

(4 < 4) > (3 > 3)

これは次のように評価されます

(4 < 4) > (3 > 3) is false

または、関数への入力は次のようになります

(4 < 6) > (2 > 1)

これは次のように評価されます

(4 < 6) > (2 > 1) is true
4

2 に答える 2

1

C の関数に演算子/操作を渡すことはできません。Haskell を検討することをお勧めします。

または、操作をマクロに渡すことができるため、これをマクロとして実装できます。したがって、マクロの定義は次のようになります。assert

#include <stdio.h>

#define assert(cond) if (!(cond) && printf("Assertion failed: " # cond " at " __FILE__ ":%d\n", __LINE__) != 0) abort()

int main(void) {
    assert(1 > 1);
}

おそらく、次のようなものが必要です。

#include <stdio.h>

#define rational_check(cond) printf(# cond " is %s\n", (cond) == 0 ? "false" : "true")

int main(void) {
    rational_check((4 > 4) > (3 > 3));
    rational_check((4 < 6) > (2 > 1)); // (4 < 6) > (2 > 1) is 1 > 1, by the way... false
}

ただし、これがあなたのニーズに合っているかどうかはわかりません。関数ポインターは、rational_check から派生することはできません。また、実行時に形成される式を表す文字列を操作することもできません。それらを必要とするユースケースでは、トランスレーターを作成する必要があります...そうでない場合は、これが適しているはずです。

于 2013-03-17T02:37:37.500 に答える
-1

これは私にとってはうまくいきます。考え過ぎでした。

int rationalCheck(x, a, b){


if ( x == '<')
{
    if (a >= b)
    {
        return 99;
    }

    if (b <= a) {
        return 99;
    }
}

if (x == '>')
{
    if (a <= b)
    {
        return 99;

    }
    if (b >= a)
    {
        return 99;
    }

}


return 1;
}

皆様のご意見をお寄せいただきありがとうございます。

于 2013-03-17T02:46:15.130 に答える