问题标签 [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 - (int (*)[])var1 代表什么?
我找到了这个示例代码,并尝试用谷歌搜索(int (*)[])var1
可以代表什么,但没有得到有用的结果。
通常我在 C99 中使用 VLA,所以我习惯于:
谢谢!
c++ - 我应该使用 C(99) 布尔值吗?(也是 c++ 中的 c++ 布尔值?)
我没有做过太多的 c 编程,但是当我需要 false 时,我输入 0,当我想要 true 时,我输入 1,(例如 while(1)),在其他情况下,我使用诸如“while(ptr)”之类的东西或“如果(x)”。
我是否应该尝试使用 C99 布尔值,如果我正在帮助刚接触编程的人学习 c 基础知识(考虑 cs 1?? 学生),我应该将它们推荐给其他人吗?
我很确定 Visual Studio 编译器支持 c99 布尔值,但是很多项目(工业中的开源和 c 应用程序)是否为 c89 编译?如果我不使用 C bools,我至少应该做一些类似#define TRUE 1 #define FALSE 0 的事情吗?
还有c ++布尔值(对于c ++)呢?
c - 开源项目中的C99混合声明和代码?
为什么在Linux 内核或GNOME等开源 C 项目中仍然没有使用C99 混合声明和代码?
我真的很喜欢混合声明和代码,因为它使代码更具可读性,并通过将变量的范围限制在尽可能窄的范围内来防止难以看到的错误。这是 Google为 C++推荐的。
例如,Linux至少需要GCC 3.2,而 GCC 3.1支持C99 混合声明和代码
c - C 结构中的灵活数组成员
引用 C-std 第 6.7.2.1 节,
这是一个有效的结构声明。我正在寻找这种语法的一些实际用途。准确地说,这个构造比保持 double* 作为第二个元素更强大或更弱?或者这是另一种“你可以以多种方式做到”的情况?
阿潘
c - “表达式中的声明和声明”是否特定于 GNU C?
表达式中的声明和声明是GNU C 特有的吗?或者这个特性也包含在 C99 标准中?
c - 与 malloc/free 相比,使用 C99 VLA 是个好主意吗?
使用 C99 VLA 是个好主意吗?与 malloc/free 相比,何时使用 VLA 更合适?(因为 VLA 可能会炸毁堆栈?)
c - C99 是否允许 UCHAR_MAX > UINT_MAX
6.3.1.1 状态
有符号整数类型的秩应大于任何精度较低的有符号整数类型的秩。
long long int 的rank 大于long int 的rank,long int 的rank 大于int 的rank,short int 的rank 大于signed char 的rank。
那么,难道不是这样吗
c - 如何在 gcc 中强制执行 C89 风格的变量声明?
我的代码库主要是 C 和一点 C++,主要是用 gcc 构建的,但偶尔需要用 MSVC 构建。微软的 C 编译器仍然与 C89 差不多,只是有一些小的扩展,而且它仍然不支持混合代码和变量定义à la C++/C99。所以我需要找到一种方法来防止开发人员在使用 gcc 时编写乱序代码/变量定义,否则构建随后会与 MSVC 中断。如果我使用gcc -std=c89
,那么一切都会中断,因为不允许使用 C++ 样式的注释(可能还有其他问题,但我没有进一步研究这个问题)。如果我使用gcc -std=gnu89
那么乱序代码/变量定义是允许的,所以这对我也没有帮助。有任何想法吗 ?我想我只需要类似的东西gcc -std=c99 -fno-inline-variable-definitions
,如果存在这样的选项。
c - gcc - 2 个版本,内联函数的不同处理
最近我在项目中遇到了一个问题。我通常在 gcc-4 中编译它,但在尝试在 gcc-3 中编译后,我注意到对内联函数的不同处理。为了说明这一点,我创建了一个简单的示例:
主.c:
文件.c:
头文件.h
当我在 gcc-3.4.6 中编译代码时:
我得到链接器错误(f 的多个定义),如果我删除-O2
标志也是一样的。我知道编译器不需要内联任何东西,所以我假设它把 f 放在目标文件中,而不是在main.c
and的情况下内联它file.c
,因此是多重定义错误。显然我可以通过制作f
静态来解决这个问题,然后,在最坏的情况下,f
在二进制文件中有几个 's。
但我尝试在 gcc-4.3.5 中编译这段代码:
一切正常,所以我假设f
在这两种情况下都内联了较新的 gcc,并且二进制文件中根本没有函数f
(在 gdb 中检查,我是对的)。
但是,当我删除该-O2
标志时,我得到了两个未定义的int f()
. 在这里,我真的不明白发生了什么。似乎 gcc 假定f
会被内联,因此它没有将其添加到目标文件中,但后来(因为没有-O2
)它决定生成对这些函数的调用而不是内联,这就是链接器错误的来源。
现在问题来了:我应该如何定义和声明我想要内联的简单和小函数,以便它们可以在整个项目中使用而不用担心各种编译器中的问题?将它们全部设为静态是正确的做法吗?或者也许 gcc-4 坏了,我不应该在几个翻译单元中有多个内联函数定义,除非它们是静态的?