一个C语言printf输出的问题

int main(int argc, const char * argv[]) {
    
    printf("%g\n", (double)15/10 );//1.5
    printf("%g\n", 25/(double)10 );//2.5
    printf("%g\n", 35/10 );//2.5
    printf("%g\n", (double)(45/10) );//4
    
    return EXIT_SUCCESS;
}
int main(int argc, const char * argv[]) {
    
    printf("%g\n", 35/10 );//0
    
    return EXIT_SUCCESS;
}

问题

请帮忙解释一下 35/10 的输出?

printf("%g\n", 3 );//0
阅读 1.9k
评论 更新于 2017-01-06
    3 个回答
    xelz
    • 11.8k

    If a conversion specification is invalid, the behavior is undefined.
    If any argument is not the correct type for the corresponding
    conversion specification, the behavior is undefined.

    g代表浮点,但是传入的是int型,printf的行为是不可控的。


    有意思的实验

    printf("%d, %f, %d, %f\n", 666.0, 555, 444, 333.0);

    输出

    555, 666.000000, 444, 333.000000

    似乎int和float被放入两个不同的stack,根据实际类型来消费stack里的数据 (大误,瞎猜 ^ ^)

    评论 赞赏 2017-01-08