gpt4 book ai didi

c++ - 测试标识符未被截断并因此混淆的好方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:57 25 4
gpt4 key购买 nike

在今天的 C++ 类(class)中,我们讨论了标识符的最大可能长度,以及编译器如何在一定长度后最终停止将变量视为不同的变量。 (我的教授似乎暗示非常长的标识符会被截断。)我 posted another question earlier, hoping to see if the limit is defined somewhere .我的问题有点不同。假设我想测试标识符名称长度的实际限制或强制限制。我将如何去做呢?这就是我想做的事情,但不知何故它似乎太简单了。

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

我的做法是否正确?在“破坏”编译器或“运行时”之前,我会用完内存吗?

最佳答案

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

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

int name;
int name;

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

int namewithlastsignificantcharacterhere_abc;
int namewithlastsignificantcharacterhere_123;

我会使用 macro 脚本语言来生成连续更长的名称,直到您遇到一个坏掉的名称。这是一个 Ruby 单行代码

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

当我在一个c文件中#include var.txt,并用VS2008编译时,我得到了错误

"1>c:\code\quiz\var.txt(512) : fatal error C1064: compiler limit : token overflowed internal buffer"

而512*8个字符是JRL引用的4096个。

关于c++ - 测试标识符未被截断并因此混淆的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7397000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com