例如,

    1. #include <stdio.h>
    2. #ifndef TB
    3. #define TB (1024 * 1024 * 1024 * 1024)
    4. #endif
    5. int main()
    6. {
    7. size_t i1 = 10 * TB;
    8. printf("%llu\n", i1);
    9. }

    编译警告:

    1. main.c: In function main’:
    2. main.c:4:32: warning: integer overflow in expression [-Woverflow]
    3. #define TB (1024 * 1024 * 1024 * 1024 )
    4. ^
    5. main.c:9:19: note: in expansion of macro TB
    6. size_t i1 = 10 * TB;
    7. ^~
    8. (nil)

    原因是1024 1024 1024 * 1024 的每个值都是int, 但是相乘的值超过了int最大值(2147483647), 所以编译出错。

    解决方法:将相乘的第一个数转成long long即可, 即在数字后面加LL。
    改动如下:

    1. #include <stdio.h>
    2. #ifndef TB
    3. #define TB (1024LL * 1024 * 1024 * 1024)
    4. #endif
    5. int main()
    6. {
    7. size_t i1 = 10 * TB;
    8. printf("%llu\n", i1);
    9. }