例如,
#include <stdio.h>#ifndef TB#define TB (1024 * 1024 * 1024 * 1024)#endifint 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)#endifint main(){size_t i1 = 10 * TB;printf("%llu\n", i1);}
