SSqwq_ @ 2024-11-28 19:52:54
#define int long long
是不是 UB,会挂分吗。
下面这个函数是不是 UB,会挂分吗。
int f(char x){
if(x>='0'&&x<='9')return x-'0';
if(x=='A')return 10;
if(x=='B')return 11;
if(x=='C')return 12;
if(x=='D')return 13;
if(x=='E')return 14;
if(x=='F')return 15;
}
关 cincout 同步流是不是 UB,会挂分吗。
clock() 常数大吗。
by return_TLE @ 2024-11-28 20:02:11
@chen_z@Vector_Li@XuYueming 应该每一次调用会花费3微秒,所以不能频繁调用
by fangzichang @ 2024-11-28 20:02:14
#define int long long
是 UB,因为我猜你会用标准库。
快谢谢 GNU 的程序员和他们的实现,这么写基本只会有爆空间和常数大的问题,或者说行为和预期一样。
下面那个函数是 UB。我认为会挂分。
关 cin/cout
同步流不是 UB。混用会挂分。
clock()
常数大。不要放在瓶颈。
洛谷认为我没有正确标记代码部分,所以我加了这一段。
by return_TLE @ 2024-11-28 20:04:01
@__builtin_orz错误的,对于问题4,clock函数的常数是大到无法接受的,不能放在瓶颈
by Br00k5xx @ 2024-11-28 20:05:17
而且,建议在 Linux 下测试 clock()
的速度。
by Vector_Li @ 2024-11-28 20:05:30
@fangzichang 我也记得,define int long long
是 UB
by SSqwq_ @ 2024-11-28 20:05:39
我记得有人今年 J 组 T1 写了类似的函数结果挂零了/yun
所以是不是应该在最后随便 return 一个东西防止 UB
by int_4096 @ 2024-11-28 20:07:22
@SSqwq_ 建议还是加上一个 return -1;
因为函数最好还是要在所有情况都有返回值。
by __builtin_orz @ 2024-11-28 20:08:42
@fangzichang
写在#include
的下面,#define
的作用域在这行之后
by Wzhone @ 2024-11-28 20:11:24
只要在linux底下把各种debug参数全部加好(包括但不限于-Wall
-fsanitize=undefined,address
)还能够不报错跑过大样例基本上就没问题了
实在不放心可以用arbiter跑一遍,但是CCF做的软件质量属实难评
by fangzichang @ 2024-11-28 20:11:53
@__builtin_orz 只要你作用域里用了标准库就是 UB,,但是(我说了)编译器给了还挺良好的定义,所以没表现出来问题并且基本不会出问题。