问题标签 [c99]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C99 是否向后兼容 C89?
我习惯了老式的 C 并且最近才开始探索 c99 的特性。我只有一个问题:如果我在我的程序中使用 c99、c99 标志gcc
并将它与以前的 c99 库链接,我的程序会成功编译吗?
那么,我应该坚持旧的 C89 还是进化?
c - 最有用的用户制作的 C 宏(在 GCC 中,也是 C99 中)?
您认为哪个C宏最有用?我找到了以下一个,我用它在C中进行向量算术:
它是这样工作的:
c - 可以在稍后声明的 C 引用实体中内联函数体
假设我的头文件中有两个内联函数:
我可以假设即使稍后声明了“bar”,C99 编译器也会内联“foo”?假设没有其他内部规则(如函数体变大)被触发。
即使 C99 将其作为选项,c 编译器的实现是否也在执行此操作(流行的是 Intel-C/Sun Studio/MSVC 和 gcc)?
c - 强制执行 Ansi C 标准检查的 GCC 选项?
我应该使用哪些 gcc 选项来强制执行 ANSI C (C99) 警告/错误?gcc (GCC) 3.4.2 (mingw-special)
我正在使用: gcc -pedantic -ansi -std=c99 这是正确的吗?
c - 是否可以迭代可变参数宏中的参数?
我想知道是否可以迭代传递给 C99 中的可变参数宏或使用任何 GCC 扩展的参数?
例如,是否可以编写一个通用宏,将结构及其字段作为参数传递并打印结构内每个字段的偏移量?
像这样的东西:
c - C99:我可以在'for'的块开头声明变量吗?
根据 C99,以下代码是否合法?
您可以假设在第 3 行之前从未声明过变量 x。
到目前为止,我只发现了以下内容,但我认为这还不够:
块允许将一组声明和语句组合成一个语法单元。具有自动存储持续时间的对象的初始化器和具有块范围的普通标识符的可变长度数组声明器在每次声明时被评估并将值存储在对象中(包括在没有初始化器的对象中存储不确定的值)按执行顺序到达,就好像它是一个语句,并且在每个声明中按照声明符出现的顺序。
从该 PDF 的第 145 页开始。
c - 是否可以(合法)在复合文字中分配匿名联合?
我有一个结构:
当我尝试分配复合文字时,例如:
gcc 给了我一些警告,例如:
好吧,很明显编译器不确定我是否只是将值分配给可能不明确的类型。但是,即使我尝试更精确地指定:
我得到:
我已经读过,如果我把它放在(union <union name>)
之前i:
,它可能会起作用。但是,我更喜欢匿名工会。有没有办法做到这一点?
c - 哪些 C99 功能被视为有害或不受支持
我通常用 C89 编写 C 代码,现在 C99 的一些特性(如intxx_t
or__VA_ARGS__
或snprintf
)非常有用,甚至可能是至关重要的。
在我将我的要求从 C89 扩展到 C99 之前,我想知道哪些 C99 功能得到了广泛支持,哪些没有得到广泛支持,甚至被认为是有害的。
我知道我们可以只检查我们的目标编译器支持,但这会大大缩小我们的支持范围,因为这是针对开源软件的,所以我希望获得更广泛的支持。
例如,我们使用 Solaris (suncc) 编译器和 gcc,但我们可能会移除其他编译器,同时我们只需很少的努力就可以保持兼容性。
例如,我从来没有在 Windows 上工作过,我也对 Windows 编译器一无所知,但保持 Windows 兼容性会很好。
c - Visual Studio 2008 限制为 ANSI C
我想限制 microsoft visual studio 使其只能运行“C99”(ANSI C)代码。任何人都可以给我一些指导吗?