当前位置: 首页 > 知识库问答 >
问题:

tutorialspoint上的“C模拟测试”是否正确?

沈宇定
2023-03-14

因为我编码C已经超过20年了,我想我是时候参加一次测试了!看看我是不是学到了什么,或者我只是在网上给初学者发免费但不正确的建议。

这个网站(我不是附属)提供免费的C测试。https://www.tutorialspoint.com/cprogramming/cprogramming_mock_test.htm。

共有1个答案

廉高邈
2023-03-14

这个站点一点也不太好。

这些问题是为1999年撤回的C语言旧版本编写的。它允许您将main编写为main()而不使用返回类型。20多年来,这并不是有效的,所以这就是它不能编译的原因。您需要使用-std=c90进行编译。

虽然在main()前面有隐式int的旧C90中,OS将使用函数main()的返回值,所以如果没有像这些示例中那样的return语句,这意味着未定义的行为(C11 6.9.1/12)。

>

  • Q7:没有一个答案可能是正确的。操作数'a'255的类型为int,因此保证加法(假设a=65)不会溢出,而是得到65+255=320。然后通过简单的赋值将得到的int转换为c类型,即char。该类型可以是有符号的或无符号的类型,具体取决于编译器。这会影响转换是按照C11 6.3.1.3/2定义的,还是按照6.3.1.3/3定义的。一个可能的结果是320=140h,截断:40h=64。这将在gcc x86编译器for Linux上打印字符“@”

    问题9:代码导致编译器错误,因为它违反了简单赋值(引用)的规则。它们可能意味着编写无符号x=5,*y=&x,*p=y+0;在这种情况下,结果未指定-不能保证表达式*y=&x在表达式*p=y+0之前求值。参见C11 6.7.9/23:

    初始化列表表达式的计算是相对于彼此不确定地排序的,因此任何副作用发生的顺序是未指定的。

    所以不管你怎么说,整个问题都是根本错误的。

    问题10:关于是否强制转换malloc的结果,可能会提出很多样式问题。但除此之外,假设#include 存在,则代码是可以的。如果include不存在(如问题中所示),代码就会被破坏,任何事情都可能发生。

    问题14:这是一个无限打印“你好”的无限循环。它不打印“无限循环”。

    Q28:编译错误。有趣的是,测试的前后不一致。在这里,它突然不允许从整数到指针的隐式转换,这是它之前愉快地(但不正确地)允许的。

    Q31:B或C甚至D。它取决于int的大小,它几乎肯定是2或4。然而,编译器可以自由地在联合的末尾添加填充,因此它还可以打印一个更大的数字。

    问题32:正确的答案确实是依赖于编译器的,但是...为什么哦,为什么它不是编译器依赖的Q31那么?

    如果不是这样,它会尝试打印一些不确定的值(“垃圾”),甚至是65或0,这取决于CPU编码。

  •  类似资料:
    • 本节介绍与C Programming Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 .B, .answer-sheet{ display:none !important; } .Q a{ pointer-events: none; cursor: default; } C P

    • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

    • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。

    • 问题内容: 我有一个接受默认参数的方法: 我有一个使用此方法的测试用例: 如果我放入调试点并检查该属性,则返回模拟值。但是,测试继续失败,并且断言指示从我的实际值中分配了值。我知道这是因为在导入时设置了关键字参数,并且未考虑我的模拟。 调试器 有没有一种方法可以在测试时覆盖此值,以便我可以使用模拟对象行使默认路径? 问题答案: 定义函数后,函数会将其参数默认值存储在属性中,因此可以对其进行修补。就

    • 我对JUnit测试和Mockito框架非常陌生,我有一个用例,我想测试一个方法,该方法在内部调用我需要测试的同一类的重载方法。我已经为第一个方法编写了单元测试,希望跳过内部的第二个方法调用。下面是代码片段。 需要测试的类- 测试班-

    • 我很困惑于嘲笑如何对实现进行单元测试。问题是我想嘲笑不同的预期行为。 有没有办法做到这一点?由于导入只能在文件的顶部,并且为了能够模拟某些内容,必须在导入之前声明它。我也试图传递一个本地函数,这样我就可以覆盖行为,但jest抱怨你不允许传递任何本地的东西。 在内部,可以想象使用