关于 UB

学术版

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 Wzhone @ 2024-11-28 20:11:56

@SSqwq_ 漏@了,回复在上一楼


by XuYueming @ 2024-11-28 20:13:33

@fangzichang 你又不写在 include 上面,和标准库的实现有什么关系?


by XuYueming @ 2024-11-28 20:14:26

@fangzichang 和你直接使用 long long 没有区别啊,你能举个例子吗?


by __builtin_orz @ 2024-11-28 20:16:09

@fangzichang强转:?


by Br00k5xx @ 2024-11-28 20:16:23


by Br00k5xx @ 2024-11-28 20:17:23

@fangzichang @XuYueming 严谨地说,Windows 的 define 会影响标准库,Linux 不会(我记得是


by XuYueming @ 2024-11-28 20:20:11

@Br00k5xx 可是我想不懂的一点是,define 的作用不严谨地来说,就是把之后代码中出现这个标识符的地方替换成你需要让它替换的内容。此处,define 将后文所有 int 替换为了 long long,例如,vector<int> 变成了 vector<long long>,而这是良好定义的。你使用标准库无非就是形如这样的模板,而这在上文提到是良好定义的。


by fangzichang @ 2024-11-28 20:21:51

包含标准库标头的翻译单元不可 #define#undef 在任何标准库标头中声明的名字。

使用标准库任何部分的翻译单元不可 #define#undef 词法上等同于下列内容的名称:

别让我举例子了,说了 GNU 给了良好实现。


by XuYueming @ 2024-11-28 20:22:17

@Br00k5xx 您所述的 windows 和 linux 的环境差异令我有些费解,因为 define 的行为是统一的,那么两者存在环境差异当且仅当两者对于某一处 long long 的实现有所不同


by __builtin_orz @ 2024-11-28 20:22:44

似乎并没有什么影响


上一页 | 下一页