相关疑难解决方法(0)

一个检测未定义行为的C++实现?

C++中的大量操作会导致未定义的行为,其中规范完全静音程序的行为应该是什么,并允许任何事情发生.因此,有各种各样的情况,人们有代码在调试但不是发布模式编译,或者直到看似无关的更改,或者在一台机器而不是另一台机器上工作,等等.

我的问题是是否有一个实用程序查看C++代码的执行并标记程序调用未定义行为的所有实例.虽然我们有很好的工具,比如valgrind和检查过的STL实现,但这些并不像我想的那么强 - 例如,如果你丢弃了你仍然分配的内存,那么valgrind会有误报,并且检查了STL实现不会通过基类指针捕获删除.

这个工具存在吗?或者让它躺在身边甚至是有用的?

编辑:我知道一般来说静态检查C++程序是否可能执行具有未定义行为的东西是不可判定的.但是,可以确定C++ 的特定执行是否产生了未定义的行为.实现此目的的一种方法是创建一个C++解释器,根据规范中列出的定义逐步执行代码,在每个点确定代码是否具有未定义的行为.这不会检测特定程序执行中未发生的未定义行为,但会发现任何实际在程序中显示的未定义行为.这与图灵识别如何确定TM是否接受某些输入有关,即使它通常仍然是不可判定的.

谢谢!

c++ undefined-behavior

59
推荐指数
5
解决办法
6296
查看次数

为什么存在"未定义的行为"?

某些常见的编程语言,尤其是C和C++,具有未定义行为的强烈概念:当您尝试执行某些操作之外的某些操作时,这会导致未定义的行为.

如果发生未定义的行为,则允许编译器执行任何操作(包括任何内容,'时间旅行'等).

我的问题是:为什么存在这种未定义行为的概念?据我所知,如果不是导致未定义的行为,使用超出其预期用途的操作会导致大量的错误,使用一个版本的编译器停止工作的程序,等等将被阻止一个编译错误.

为什么这不是事情的方式?

c c++ compiler-errors compilation undefined-behavior

9
推荐指数
2
解决办法
642
查看次数