我正在创建一个主函数来测试名为 mchar 的 C 函数的限制。mchar 将 char 作为参数。
int main ()
{
mchar();
mchar('A');
mchar('\n');
mchar('');
mchar(NULL);
}
我正在尝试考虑所有可能调用该方法出错的用例。所有这些都可以正确调用吗?有没有我遗漏的用例?
我正在创建一个主函数来测试名为 mchar 的 C 函数的限制。mchar 将 char 作为参数。
int main ()
{
mchar();
mchar('A');
mchar('\n');
mchar('');
mchar(NULL);
}
我正在尝试考虑所有可能调用该方法出错的用例。所有这些都可以正确调用吗?有没有我遗漏的用例?
只有 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)
关于你的问题
所有这些都可以正确调用吗?
首先
mchar('A');
mchar('\n');
这里 'A' , '\n' 是有效字符。所以这将正常工作
mchar('');
是非法的并且会给出编译时错误。例如:对于 gcc,显示的错误是 空字符常量。
mchar();
也是非法的,因为该函数需要 achar
作为参数,但您没有传递任何参数。您将收到一个编译时错误(类似于“函数的参数太少”)。
mchar(NULL);
将在正常情况下编译(好吧,如果您没有设置任何严格的编译器标志集),但会发出警告。
警告:指向整数转换的不兼容指针将“void *”传递给“char”类型的参数;