c99相关内容
我一直很高兴地与Clion一起编写代码,在使用C99标准的同时为大学创建一个项目。从今天起,数组声明的可变长度将不起作用。有谁知道为什么吗? 代码: int main() { // to allow debugging with CLION setbuf(stdout, 0); int number = 5; int myarray[number];
..
所以TCC的最新版本理应实现了C99的一些功能,但我发现它没有包含C99的数学库。 有没有办法让它在Windows上更多地使用C99的库?我在谷歌上搜索了一下,发现了一些主要与Linux有关的建议,但对于这个项目,我需要让它在Windows上运行。 编辑:这不是在Windows平台上获得‘任何’编译器的问题。我意识到有很多编译器。我特别需要让TCC来做这件事。 编辑:项目需要执行
..
我在试验inttype时制作的简单程序。h: #include #include #include bool get_bit(uint32_t x, uint8_t n) { x >>= n; return x & 1; } int main() { uint32_t x; uint8_
..
我以为C对我来说不会再有惊喜了,但这让我很惊讶。 const int NUM_FOO = 5; .... int foo[NUM_FOO]; ==>error C2057: expected constant expression 我的C++经验使我在内部尽可能地反对#define。所以这一次真的让人大吃一惊。VS2019,用/TC编译。我以为C99无论如何都允
..
..
堆栈溢出问题的一些答案获取IEEE Single-precision bits for a float 建议使用 union 结构进行类型双关(例如:将 float 的位转换为 uint32_t): 联合{浮动 f;uint32_t你;}联合国;un.f = your_float;uint32_t 目标 = un.u; 但是,根据 C99 标准(至少是草案 n1124),联合的 uint32_
..
我不明白为什么这样做是错误的: const int n = 5;诠释 x[n] = { 1,1,3,4,5 }; 即使 n 已经是一个常量值. 虽然这样做似乎适合 GNU 编译器: const int n = 5;诠释 x[n];/*没有初始化*/ 我知道 C99 的 VLA 功能,我认为它与正在发生的事情有关,但是我只是需要澄清一下背景中发生的事情. 解决方案 要记住的关键
..
我有这样的代码: $ cat test.c#include 类型定义结构{常量 int x;} SX;静态 SX mksx(void){返回 (SX) { .x = 10 };}无效 fn(无效){SX SX;而((sx = mksx()).x != 20){printf("愚蠢的代码!");}} 以及关于其正确性的2个意见: $ for i in gcc clang;做
..
我尝试使用 C 中的 bool 变量编译代码,并且包含了 stdbool 标头,但是当我编译它时,我没有指定我想用 c99 标准编译它(所以它被编译了使用 ANSI C 标准),但它仍然有效.我想知道为什么会这样?这是代码: #include #include int main() {字符名称[20];printf("你叫什么名字?");获取(名称);pr
..
出于不值得一提的原因,我想知道布尔表达式是否有标准定义的值.例如 int foo () {返回 (bar > 5);} 背景是我担心我们的团队将 TRUE 定义为不同于 1 的东西,我担心有人可能会这样做: if (foo() == TRUE) {/* 做事 */} 我知道最好的选择是简单地做 if (foo()) 但你永远不知道. 是否有为布尔表达式定义的标准值,还是取决于编译
..
刚刚偶然发现一个失败的断言,因为它将 false 与函数的返回类型进行比较,因为函数本身返回了一个布尔值,并且断言不仅检查了值,还检查了返回值的类型以匹配那个为假,以保证返回一个布尔值.现在的问题是,C99 将 bool 定义为 _Bool 并且 _Bool 甚至不一定与 int 大小相同(实际上,根据我的经验,在当今的大多数平台上,它通常与 unsigned char 大小相同),更不用说相同了
..
这是我在 Linux 上编译的一些代码: #include int main() {结构 ifreq ifr;} gcc test.c 没问题. gcc -std=gnu99 test.c 没问题. gcc -std=c99 test.c 失败并出现以下错误: test.c:在函数“main"中:test.c:4:16:错误:“ifr"的存储大小未知 C99
..
在 c(99?) 或目标 C switch 语句中是否有支持范围大小写的技巧?我知道不支持这样写: switch(x)情况1:案例 2..10:案例 11: 但我在想应该有一种方法可以使用#define 宏生成代码.当然我可以用案例列表定义一个宏,但我希望有一种更优雅的方式,比如CASERANGE(x,x+10) 会生成: 案例 x案例 x+1案例 x+2 有可能吗? 解决方案 G
..
假设一个纯粹的非优化编译器,初始化变量和声明后赋值之间的机器代码有什么区别吗? 初始化方法: int x = 2; 赋值方法: int x;x = 2; 我使用 GCC 输出为这两种不同方法生成的程序集,并且都生成了一条机器指令: movl $2, 12(%esp) 这条指令只是将 x 变量持有的内存设置为 2 的值.GCC 可能正在对此进行优化,因为它可以识别操作的最终结果;但
..
考虑: 结构人{整数高度;重量;年龄;};主函数(){人 p { .age = 18 };} 上面的代码在 C99 中是合法的,但在 C++11 中是不合法的. 什么是 c++11 标准委员会不支持这样一个方便的功能的理由是什么? 解决方案 C++ 有构造函数.如果只初始化一个成员是有意义的,那么可以通过实现适当的构造函数在程序中表达.这是 C++ 提倡的那种抽象. 另一方
..
我正在使用 Linux 机器.是否有任何系统命令可以找到我正在使用的 C 编译器所遵循的标准? 解决方案 这取决于编译器,我假设你使用的是 GCC.您可以使用以下方法检查编译器定义的宏: gcc -dM -E -
..
众所周知,微软的 Visual Studio 编译器不支持 C99,看起来他们有 没有计划 支持它. 但是,编译器确实包含一些精选的功能,例如可变参数宏和 long long - 请参阅 这个答案: 我们收到了很多关于某些 C99 功能的请求,我们已经尝试实现它们(或类似功能).几个示例是可变参数宏、long long、__pragma、__FUNCTION__ 和 __restric
..
据我了解,C 规范说 int 类型应该是目标平台上最有效的类型,至少包含 16 位. int_fast16_t 的 C99 定义不也是这样吗? 也许他们把它放在那里只是为了保持一致性,因为需要其他 int_fastXX_t? 更新 总结以下讨论: 我的问题在很多方面都是错误的.C 标准没有为 int 指定位数.它给出了它必须包含的范围 [-32767,32767].
..
假设您使用的是支持 C99(甚至只是 stdint.h)的编译器,是否有任何理由不使用 uint8_t 等固定宽度整数类型? 我知道的一个原因是,在处理字符时使用 chars 比使用 (u)int8_ts 更有意义,因为这个问题中提到. 但是如果你打算存储一个数字,你什么时候想使用一个你不知道它有多大的类型呢?IE.在什么情况下,您希望在 unsigned short 中存储一个数字,
..
这源于今天早些时候关于 bignum 库和 gcc 特定于 C 语言的 hacks 的问题.具体来说,使用了这两个声明: typedef unsigned int dword_t __attribute__((mode(DI))); 在 32 位系统上和 typedef unsigned int dword_t __attribute__((mode(TI))); 在 64 位系统上.
..