首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

请问下 c 和 c++的 printf 是不一样的吗

  •  
  •   hardman · 2018-01-05 10:53:39 +08:00 · 2348 次点击
    这是一个创建于 707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 vc++编写 printf (“%d%d%d ”,a,++a,++a );a 等于 5 输出结果是 5,6,7 用 vs 编译的时候 776 这个是使用的 c 标准不一样嘛

    24 回复  |  直到 2018-01-05 17:39:09 +08:00
        1
    am241   2018-01-05 10:58:12 +08:00
    从左到右和从右到左,调用约定不一样吧
        2
    caviar   2018-01-05 11:00:03 +08:00 via Android   ♥ 1
    这个是 ub 啊,同样是 c 你换个编译器都有可能不一样
        3
    QAPTEAWH   2018-01-05 11:01:13 +08:00   ♥ 4
    ++你大爷
        4
    ini   2018-01-05 11:06:10 +08:00 via iPhone
    搜索 stdcall 和 cdecl
        5
    kyotrue   2018-01-05 11:08:26 +08:00
    编译器处理的区别吧,话说讲真有这么写程序的么。。。
        6
    kyotrue   2018-01-05 11:09:12 +08:00
    @ini 都是从右到左入栈的
        7
    b821025551b   2018-01-05 11:14:31 +08:00   ♥ 2
    请扔掉那本谭浩强。
        8
    Carseason   2018-01-05 11:18:21 +08:00 via iPhone   ♥ 1
    谭浩强害了多少学 C 的孩子.
        9
    XiaoXiaoNiWa   2018-01-05 11:37:05 +08:00 via Android
    这个问题没有意义。
    永远不要这样写代码。
        10
    chuckzhou   2018-01-05 11:49:18 +08:00
    你写这种代码的目的是什么呢?解决什么问题?
        11
    geelaw   2018-01-05 12:25:32 +08:00 via iPhone   ♥ 1
    @am241
    @ini
    @kyotrue

    和入栈顺序没关系,不一定非要按照入栈顺序计算参数,甚至可以选择随机一个顺序来计算。
        12
    we2ex   2018-01-05 12:32:36 +08:00 via Android
    C 语言的未定义行为
        13
    kyotrue   2018-01-05 12:40:45 +08:00
    @geelaw 所以我说了是看编译器怎么处理
    这种问题也就只能出现在面试题中了,还有冷门运算符的优先级问题,实际工作谁这么写。。。
        14
    kamen   2018-01-05 12:44:35 +08:00 via Android
    永远不要这样写代码,会被打的。
        15
    limhiaoing   2018-01-05 13:02:53 +08:00 via iPhone   ♥ 1
    C 和 C++都没有规定参数的求值顺序,所以这段代码是 UB ( undefined behavior )。
        16
    northisland   2018-01-05 13:18:20 +08:00 via iPhone
    这样看来,确实是不一样的。

    c++编译器连接器,会把 c 中不存在的语言特性变成机器码。而对于 c 中存在的可编译的部分,楼主的 c++工具显然并没直接使用 c 生成的机器码。

    只能这么解释了。我知道 cout 底层是个异步进程管道,不知道 printf 底层是什么。
        17
    watzds   2018-01-05 13:27:32 +08:00 via Android
    这个和 printf 没关系
        18
    binxin   2018-01-05 13:29:31 +08:00
    感觉 ++i,i++,i,不能在同一行共存。
        19
    ini   2018-01-05 13:38:15 +08:00
    @geelaw #11 soga,又涨姿势了
        20
    ini   2018-01-05 13:45:02 +08:00
    https://stackoverflow.com/a/367663/1256392 这里有详细讲,是 UB,但不是 undefined behavior,而是 unspecified behavior
        21
    geelaw   2018-01-05 14:10:31 +08:00 via iPhone
    @limhiaoing 没有规定是 unspecified/implementation-defined,但总是会计算并调用的; undefined 是说编译器可以有任意行为的。
        22
    700388   2018-01-05 15:26:38 +08:00
    vc 的 g++ 和 vs 的 g++版本不同造成差异化。 如果都是一样版本则没有这样的错误。
    用最新版本的 g++ 才是首选。
        23
    jjianwen68   2018-01-05 15:40:18 +08:00
    加几个括号,声明几个变量,死不了人的
        24
    limhiaoing   2018-01-05 17:39:08 +08:00 via iPhone
    @ini
    @geelaw
    了解!
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   888 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 20:49 · PVG 04:49 · LAX 12:49 · JFK 15:49
    ♥ Do have faith in what you're doing.