C真的是“吗?”;变相装配;? 作为一个C++程序员,我现在决定学习C对我写的东西有更多的控制。

C真的是“吗?”;变相装配;? 作为一个C++程序员,我现在决定学习C对我写的东西有更多的控制。,c++,c,C++,C,C语言中是否有任何语法特性会导致不可预知的汇编代码?类似于C语言中的虚函数++ C是伪装的汇编程序吗?我非常喜欢这个主意 创建什么汇编代码取决于编译器。根据您的优化,这可能是不可预测的。如果您使用的是gcc(我相信其他编译器也有这个选项),那么可以使用-O0标志尽可能直接地编译代码 创建什么汇编代码取决于编译器。根据您的优化,这可能是不可预测的。如果您使用的是gcc(我相信其他编译器也有这个选项),那么可以使用-O0标志尽可能直接地编译代码 编写C的方式可以使它与将要生成的程序集具有几乎一对一的

C语言中是否有任何语法特性会导致不可预知的汇编代码?类似于C语言中的虚函数++

  • C是伪装的汇编程序吗?我非常喜欢这个主意


  • 创建什么汇编代码取决于编译器。根据您的优化,这可能是不可预测的。如果您使用的是gcc(我相信其他编译器也有这个选项),那么可以使用
    -O0
    标志尽可能直接地编译代码

    创建什么汇编代码取决于编译器。根据您的优化,这可能是不可预测的。如果您使用的是gcc(我相信其他编译器也有这个选项),那么可以使用
    -O0
    标志尽可能直接地编译代码

    编写C的方式可以使它与将要生成的程序集具有几乎一对一的对应关系。当您引入更高级的构造时,每个语句将生成更多的程序集。各种C构造每次都应该生成相同的汇编模式,因此,如果您熟悉这些汇编习惯用法,就可以开始将这些高级构造合并到您的C代码中

    优化编译器可能非常激进,它可以改变代码执行的顺序,并进行其他权衡,以改变程序集的外观,从而使生成的目标代码更小或更快。据我所知,如果您想禁用这些优化,总是有可能的


    (请注意,我并不推荐这两种方法中的任何一种,也不使用它们。但是,如果您决定研究它们,您可以使用它们。)

    编写C的方式可以使它与将生成的程序集几乎一一对应。当您引入更高级的构造时,每个语句将生成更多的程序集。各种C构造每次都应该生成相同的汇编模式,因此,如果您熟悉这些汇编习惯用法,就可以开始将这些高级构造合并到您的C代码中

    优化编译器可能非常激进,它可以改变代码执行的顺序,并进行其他权衡,以改变程序集的外观,从而使生成的目标代码更小或更快。据我所知,如果您想禁用这些优化,总是有可能的


    (注意,我并不是真的推荐这些方法,也不使用它们。但是,如果你决定你想研究它们,它们对你来说是可用的)。< / P> < P>我不认为C比C++提供“更多的控制”是准确的。C++的近于超集功能意味着你可以在C++中做任何事情,你可以在C.中有一些在C++中更繁琐的东西(比如需要把空洞*分配给另一种类型),但是C++中有很多东西我觉得是方便的。(比如不需要键入定义结构以避免在任何需要Foo的地方编写

    structfoo

    <>我感觉尝试从程序中剥离出许多“高级”C++特性是一个很好的练习,并且只在你绝对需要的时候只使用那些“复杂的位”(在编译代码中,而不是理解代码)。扔掉成员函数、RTTI和异常会给你带来一个好的方式。


    关于你的特定问题:除非你知道这个特性在做什么,否则一切都会导致不可预知的机器代码。我认为,由虚拟函数生成的代码是那个特性的更直接和最明显的实现之一。C不给你额外的访问,因为它是伪装的汇编程序。除了C++之外,还可以在两个(以及您可以尝试)上执行位操作。无论你选择哪种语言,都可以直接写入内存。在任何一种语言中,你也可以直接编写机器代码,只要把一个字节数组转换成函数并调用它。这就不会被认为是广泛的可移植的,但是如果它是你所追求的能力,C++就不会隐藏任何东西。

    < P>我认为C给出的是不准确的。C++ C++的C++ C++的近邻超集功能意味着你可以在C++中做任何事情,你可以在C.中有一些C++中比较繁琐的东西(比如需要把空洞*分配给另一种类型),但是C++中有很多东西我觉得是方便的。(比如不需要键入定义结构以避免在任何需要Foo的地方编写
    structfoo

    <>我感觉尝试从程序中剥离出许多“高级”C++特性是一个很好的练习,并且只在你绝对需要的时候只使用那些“复杂的位”(在编译代码中,而不是理解代码)。扔掉成员函数、RTTI和异常会给你带来一个好的方式。


    关于你的特定问题:除非你知道这个特性在做什么,否则一切都会导致不可预知的机器代码。我认为,由虚拟函数生成的代码是那个特性的更直接和最明显的实现之一。C不给你额外的访问,因为它是伪装的汇编程序。“比C++更有效,您可以在两个操作上进行位操作,(可以尝试)无论你选择哪种语言,都可以直接写入内存。在任何一种语言中,你也可以直接编写机器代码,只要把一个字节数组转换成函数并调用它。这就不会被认为是广泛的可移植的,但是如果你的能力是C++,C++就不会隐藏任何东西。,这真的只是“伪装的机器代码”?这完全取决于它伪装的程度和数量