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
词法上等同于下列内容的名称:
likely
与 unlikely
为函数式宏。 (C++20 起) ]别让我举例子了,说了 GNU 给了良好实现。
by XuYueming @ 2024-11-28 20:22:17
@Br00k5xx 您所述的 windows 和 linux 的环境差异令我有些费解,因为 define
的行为是统一的,那么两者存在环境差异当且仅当两者对于某一处 long long
的实现有所不同
by __builtin_orz @ 2024-11-28 20:22:44
似乎并没有什么影响