【问题标题】:C++ exam, who gets the first one correct? [duplicate]C++ 考试,谁答对了第一个? [复制]
【发布时间】:2012-05-23 18:43:33
【问题描述】:

可能重复:
What is the proper declaration of main?

我刚刚参加了我的第一次 C++ 考试。 第一个问题是

int main(◊, char ** argv)
以下哪个建议不起作用(作为第一个形式参数替代◊):

a) 字符 argc b) 整数 argc c) 双 argc d) 布尔型 argc


在 4 小时的纯手写个人考试中,答案占 2%。
允许使用所有工具,接受任何可编程设备或任何通信方式

谁能做到这一点:)?

【问题讨论】:

  • 您是否解释过,或者这是实际的问题?如果是这样,那么它的配方很糟糕。
  • 问题需要指定一个实现或询问哪个工作。其中一个由 C++ 保证,因此它是否允许其他完全取决于实现,如果允许,会发生什么。很多写这些考试的人比 SO 上的很多人都不太懂 C++,所以我认为如何通过“C++-stupid”考试并不是网站的真正主题。
  • @juanchopanza && Steve Jessop。这是完整的问题。它最初是用丹麦语提出的,但翻译成英语非常准确。
  • @user1361521:我不会对你投反对票,但请给考官一个“-1”。
  • 或者如果问题允许您检查多个答案,并且这里翻译为“其中哪个”的丹麦语短语也可以理解为“其中哪个”。

标签: c++ types main


【解决方案1】:

定义“有效”的含义。这些可能中的任何一个都可以工作,但是一个有效的、符合标准的、格式良好的 C++ 程序具有以下任一签名:

int main()
int main(int argc, char** argv)
int main(int argc, char* argv[])

所以 a)、c) 和 d) 是错误的。

【讨论】:

  • 我认为应该允许在使用 a) c) 或 d) 的任何人身上使用线索棒 (2x4)。从技术上讲,在 sizeof(char) == sizeof(int) a) 可以正常工作的平台上,但我仍然宁愿根本看不到它。
  • @r_ahlskog 所以你说 UB 没问题,只要它按预期工作?
  • 我说“可以工作”和“永远不想看到它”,也许“不会在一周中的每一天都爆炸”和“用棍子打他们一下,只是可以肯定”会更好。这些学校推动 UB 的问题真的让我反胃。
  • “工作正常”和“正常”之间可能存在技术差异。工作正常但不正常的事情是最狡猾的错误!
  • main 的签名是实现定义的;除了两个必需的,唯一的要求是它们都返回int如果程序使用不支持的main签名,我认为需要进行诊断;从 QoI 的角度来看,这当然是必需的。所以 b) 是有保证的,a)、c) 和 d) 是实现定义的,但要么编译失败,要么可以工作。
【解决方案2】:

定义“不起作用”?

int main(char argc, char ** argv)
{
    printf("%d\n", argc);
    return 0;
}

./a.out 1 2 3
Output: 4

int main(int argc, char ** argv)
{
    printf("%d\n", argc);
    return 0;
}

./a.out 1 2 3
Output: 4

int main(double argc, char ** argv)
{
    printf("%d\n", *(int*)&argc);
    return 0;
}

./a.out 1 2 3
Output: 4

int main(bool argc, char ** argv)
{
    printf("%d\n", argc);
    return 0;
}

./a.out 1 2 3
Output: 4

【讨论】:

  • +1:违反考试规则并使用可编程设备:)
  • @Cicada - 关于“行不通”:你的猜测和我的一样好。您使用的是哪个编译器?在 Xcode 中,我只编译了选项 b)。
  • 使用 g++ 4.5.2,所有内容都已编译(尽管在 a、c、d 上有警告)并且一切正常。
【解决方案3】:

鉴于问题是问哪一个不起作用。必须是double,其他都是整数。

我相信这将是 正确 的答案,因为除了整数值之外,您不能对数组进行索引。但这假设您实际上想要索引 argv 数组。

但是在 C++ 考试中问一个多么糟糕的问题。

【讨论】:

  • 确实是“哪个不起作用” - 只有选择恰好 1 个选项才有资格作为答案。你能解释一下为什么你会争论双重吗?对我来说,它们都具有相同的功能,只要调用 main() 时没有比 argc 有更多空间的参数。
【解决方案4】:

"int argc" 是正确的用法。 argc 表示传递给 main 的参数数量。所以它是唯一的整数。

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 2021-11-07
    • 2021-08-26
    • 2018-09-13
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    相关资源
    最近更新 更多