测试标识符没有被截断从而混淆的好方法是什么?

问题描述 投票:0回答:1

在今天的 C++ 课程中,我们讨论了标识符的最大可能长度,以及编译器如何在达到一定长度后最终停止将变量视为不同的变量。 (我的教授似乎暗示非常长的标识符会被截断。)我之前发布了另一个问题,希望看看是否在某处定义了限制。我的问题有点不同。假设我想测试标识符名称长度的实际限制或强制限制。我该怎么做呢?这就是我正在考虑做的事情,但不知怎的,它似乎太简单了。

  • 第1步:生成至少两个名称很长的变量并将它们打印到控制台。如果标识符名称真的那么无限,我就不会浪费时间输入它们。我的代码应该为我做这件事。
  • 第 2 步: 尝试对变量执行一些操作,例如比较它们或任何算术。如果编译器停止区分,那么理论上,某些算术将会中断,例如
    x/(reallyLongA-reallyLongB)
    ,因为
    reallyLongA
    reallyLongB
    太长,编译器只会将它们视为同一事物。到那时,除法运算将变成除以零,这应该会严重崩溃。

我的做法正确吗?在“破坏”编译器或“运行时”之前我会耗尽内存吗?

c++ unit-testing language-design
1个回答
5
投票

我认为您甚至不需要对变量生成任何操作。

以下代码在编译时会产生重定义错误;

int name;
int name;

我希望你会得到同样的错误

int namewithlastsignificantcharacterhere_abc;
int namewithlastsignificantcharacterhere_123;

我会使用一种脚本语言来连续生成更长的名称,直到你得到一个损坏的名称。 这是 Ruby 的一句台词

C:>ruby -e "(1..2048).each{|i| put \"int #{'variable'*i}#{i};\"}" > var.txt

当我在 c 文件中 #include var.txt 并使用 VS2008 进行编译时,出现错误

“1>c

© www.soinside.com 2019 - 2024. All rights reserved.