×

Loading...

@Ottawa

Topic

This topic has been archived. It cannot be replied.
  • 工作学习 / 学科技术 / 刚跟孩子争论了半天C语言里面的变长数组,发现自己落伍了。我脑子还是大学时候的记忆,认为数组大小是编译时候定好的,但是后来C99允许了。难道是我记错了?

    Variable length arrays is a feature where we can allocate an auto array (on stack) of variable size. It can be used in a typedef statement. C supports variable sized arrays from C99 standard. For example, the below program compiles and runs fine in C.

    void fun(int n)
    {
     int arr[n];
     // ......
    }  
    int main()
    {
      fun(6);
    }
    • 你大概一直在Windows上(MS 不支持)。Linux上十几年前就有了
      • 我最后用C是95年,全是各种unix上.
      • 也对这段codes好奇:没有malloc call 这段codes就能运行?
        • 可以,试过了。让我感到很惊奇。不需要malloc or calloc, 内存是从stack 中分配,不是heap. +1
          • 我觉得难以置信。你是在 unix下吗?Java的dynamic memory allocation 是JVM 里专门有个thread 负责管理。Unix/Linux C 难道现在也弄出个 CVM?
            • 你大概从没写过C程序吧,alloca 出现差不多有30年了吧
        • 编译器帮你转用heap了.你看看变量地址吧
      • Windows 也可以,compiler 支持就行。
    • 现在c的项目已经少了,大部分转向c++,
      • C的项目C++并不合适,很多转向Rust了
        • 在多伦多根本就没啥c++的工作了。。。现在手生的很,看见c++代码会不自禁带入java的写法了。
          • 唉,都是眼泪呀。C++没戏了。Java好学吗?
            • 转 java 不如转 C# ---- 你看和 C++ 多象
              • 哪一种需求更多涅?
          • 游戏Unreal编程C++还是很火的,其他的吗,很少见到应用层用C++了
    • 要实现动态数组的方法在C++/C里有很多,一组 std::set / std::vector / std::array 都是动态的,使用上很方便。
      • 这些都是c++,c没有std
    • 对,这样也可以 char list[sizeof(s)]
    • C99是有很多新东西,但不是所有平台都支持C99。如果需要考虑多平台通用性,则需要慎用C99 +1
      • 基本没有用过C。C99难道不应该是20年前的东西吗?为什么会支持不足呢?
        • C程序的对象经常是各种小板子,compiler的支持有限。
          • 20年前的标准都不支持?C++这边20版好像都粗来了,虽然路也是越走越窄。 +1
            • 单板机的资源有限,一些耗资源的library往往没有,比如C++的library就没有。
              • 老大,不支持C++我理解。但是,既然支持C编译器,那二十多年前出来的标准都不支持,还是超出了我的想象。感觉不至于如此啊?😢
                • 有人说微软当年为了推C++故意不支持C99,拖拖拉拉直到VS2015才基本实现。GCC也没有完全支持。
                  • 哎我去,微软真这么干?图啥呀,C++又不是微软独家提供。
                    • 当年VSC++可是很火的。
                      • 是啊。用VS的,很少有人用C吧?感觉是两拨客户啊?可能需求太少,微软也就没动力把C编译器弄好
                        • C主要还是给讲求效率的低端单板机编程,这些单板机的C compiler几乎都是用GCC改的,GCC如果不完全支持C99,这些compiler肯定也不支持。
                          • 原来如此。谢谢
                    • 开源项目基本都是c99,大部分只能在linux下编译,因为vs不支持c99,想在windows下编译开源项目都要累死,微软就是抵触开源项目,
                      • 嗯,这样就好理解了。就是想给别人找麻烦。让开源项目用不了VS的IDE
                        • 是为了抵制linux,当时移动设备和云还没兴起,当iphone出现后,微软感觉大势已去,就开始慢慢转向,
      • 有道理