例如,
#include <stdio.h>
#ifndef TB
#define TB (1024 * 1024 * 1024 * 1024)
#endif
int main()
{
size_t i1 = 10 * TB;
printf("%llu\n", i1);
}
编译警告:
main.c: In function ‘main’:
main.c:4:32: warning: integer overflow in expression [-Woverflow]
#define TB (1024 * 1024 * 1024 * 1024 )
^
main.c:9:19: note: in expansion of macro ‘TB’
size_t i1 = 10 * TB;
^~
(nil)
原因是1024 1024 1024 * 1024 的每个值都是int, 但是相乘的值超过了int最大值(2147483647), 所以编译出错。
解决方法:将相乘的第一个数转成long long即可, 即在数字后面加LL。
改动如下:
#include <stdio.h>
#ifndef TB
#define TB (1024LL * 1024 * 1024 * 1024)
#endif
int main()
{
size_t i1 = 10 * TB;
printf("%llu\n", i1);
}