我是球拍的新手,我需要作为编写一些程序的作业.检查参数的类型是一种好习惯吗?例如,更好的是:
(define (add x y)
(+ x y)
)
Run Code Online (Sandbox Code Playgroud)
要么
(define (add x y)
(unless (number? x)(raise exception))
(unless (number? y)(raise exception))
(+ x y)
)
Run Code Online (Sandbox Code Playgroud)
我可以考虑一下:类型检查会使异常更早被抛出,并且更容易找到.但它使代码更复杂,更不易读.
我写了以下程序:
#include<stdio.h>
int main(){
printf("%x\n");
printf("%x\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道它是未定义的行为,我只是检查发生了什么.编译器是gcc.
样本输出是:
541d3118
7ffffff7
Run Code Online (Sandbox Code Playgroud)
另一个示例输出是:
e0b08078
7ffffff7
Run Code Online (Sandbox Code Playgroud)
当我使用-O3flag 编译它时,结果是:
5ec20f18
9
Run Code Online (Sandbox Code Playgroud)
和
3bedfa08
9
Run Code Online (Sandbox Code Playgroud)
为什么第一个值会改变,而不是第二个值?为什么高优化级别的第二个值不同?