0

mchar という C 関数の限界をテストするためのメイン関数を作成しています。mchar は char を引数として取ります。

int main ()
{
    mchar();
    mchar('A');
    mchar('\n');
    mchar('');
    mchar(NULL);
}

メソッドを呼び出して問題が発生する可能性のあるすべてのユースケースを考えようとしています。これらはすべて適切に呼び出すことができますか? そして、私が見逃しているユースケースはありますか?

4

2 に答える 2

7

256 文字しかないので、それらすべてで簡単に呼び出すことができます。

#include <limits.h>

int main(void)
{
    for (int c = CHAR_MIN; c <= CHAR_MAX; ++c) {
        mchar(c);
    }

    return 0;
}

特に「面白い」キャラクターをテストしたい場合は、これらのキャラクターを試してみてください。

mchar('\'');    // Single quote
mchar('"');     // Double quote
mchar('\\');    // Backslash

mchar(' ');     // Space
mchar('\t');    // Tab
mchar('\n');    // Line feed
mchar('\r');    // Carriage return

mchar('\0');    // NUL
mchar('\b');    // Backspace
mchar('\f');    // Form feed
mchar('\v');    // Vertical tab
mchar('\a');    // Bell (alert)
于 2013-01-25T03:42:44.170 に答える
0

ご質問について

これらはすべて適切に呼び出すことができますか?

まずは

mchar('A');
mchar('\n');

ここで 'A' 、 '\n' は有効な文字です。したがって、これは適切に機能します

mchar('');

は違法であり、コンパイル時にエラーが発生します。例: gcc の場合、表示されるエラーは 空の文字定数です。

mchar();

char関数は引数として a を想定していますが、何も渡していないため、これも不正です。コンパイル時エラーが発生します (「関数の引数が少なすぎます」のようなもの)。

mchar(NULL);

通常の場合 (厳密なコンパイラ フラグを設定していない場合) はコンパイルされますが、警告が表示されます。

警告: 型 'char' のパラメーターに 'void *' を渡す整数変換への互換性のないポインター。

于 2013-01-25T03:42:54.650 に答える