C最早的未定义的行为是什么?
发布时间:2020-12-16 03:04:53 所属栏目:百科 来源:网络整理
导读:我知道未定义的行为可能会导致任何事情,这使任何包含UB的程序可能无意义.我想知道是否有任何方法来确定程序中最早的一点,即未定义的行为可能会导致问题. 这是一个例子来说明我的问题. void causeUndefinedBehavior(){ //any code that causes undefined beha
我知道未定义的行为可能会导致任何事情,这使任何包含UB的程序可能无意义.我想知道是否有任何方法来确定程序中最早的一点,即未定义的行为可能会导致问题.
这是一个例子来说明我的问题. void causeUndefinedBehavior() { //any code that causes undefined behavior //every time it is run char* a = nullptr; *a; } int main() { //code before call //... causeUndefinedBehavior(); //code after call //... } 从我的理解,可能的时间未定义的行为可以被唤起(不一定表现)是: >当causeUndefinedBehavior()被编译时. 或者是对于每种情况和每个实施情况,引起不确定行为完全不同的点? 另外,如果我注释掉了causeUndefinedBehavior()被调用的行,那么会消除UB,还是会在程序中,因为包含UB的代码被编译? 解决方法
由于您的代码有所演示,未定义的行为几乎总是在尝试行为时运行时状态的一个条件.对你的代码进行一些修改可以使这一点显而易见:
void causeUndefinedBehavior() { //any code that causes undefined behavior //every time it is run char* a = nullptr; *a; } int main() { srand(time(NULL)); //code before call //... if (rand() % 973 == 0) causeUndefinedBehavior(); //code after call //... } 你可以执行这一千次以上,永远不要去执行UB执行条件.这并不改变函数本身显然是UB的事实,而是在调用者的上下文中编译时检测它不是微不足道的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |