我分配0.4543543234343654632452452525254e-323给一个double变量a并打印它,虽然它小于DBL_MIN,但它仍然可以分配和打印.
DBL_MAX: 1.79769e+308
FLT_MAX: 3.40282e+38
DBL_MIN: 2.22507e-308
FLT_MIN: 1.17549e-38
a: 4.94066e-324
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我在我的Ubuntu系统中写了这样的代码:
我的.h
#include <stdio.h>
int a;
int set(void);
Run Code Online (Sandbox Code Playgroud)
库文件
#include "my.h"
int set(void) {
a = 100;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
主程序
#include "my.h"
int main(void){
set();
printf("a = %d\n", a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我使用以下命令来构建它们:
gcc -shared -fPIC -o libmy.so -I. lib.c
gcc -L. -lmy -I. -o test main.c
Run Code Online (Sandbox Code Playgroud)
当我构建测试时,我收到错误信息:
main.c:(.text+0x5):undefined reference to 'set'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
但是当我使用在 Fedora23 和 Fedora24 中运行的相同代码时,它运行良好。
所以我想知道为什么会发生这种情况?Ubuntu系统有什么限制吗?