问题标签 [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 代码的免费静态检查器
我正在为 C99 代码(包括 GCC 扩展)寻找一个免费的静态检查器,它能够明确地说“这些预处理器宏总是被定义的”。
我需要最后一部分,因为我正在为单个目标处理器编译嵌入式代码。编译器(Microchip 的 C32,基于 GCC)根据所选处理器设置宏,然后在 PIC32 头文件中使用该宏来选择要包含的处理器特定头文件。因此, cppcheck失败,因为它检测到#ifdef
用于选择许多可能的 PIC32 处理器之一的 30 个不同的 s,尝试分析这些以及所有其他#define
s 的所有可能组合,但失败了。
例如,如果夹板可以处理 C99 代码,我会使用
另一个问题是调用了 PIC32 工具链编译器pic32-gcc
而不仅仅是gcc
,尽管我还没有达到需要考虑这一点的地步。
更新 #1 - 我感兴趣但与这个问题正交的一件事是 Eclipse 集成(不必为 30 多个编译单元编写生成文件会很好)。我在Eclipse 论坛上问过这个问题(尽管那里的讨论更多关于集成到 Eclipse 中)。没有什么开创性的。
更新 #2scan-build
- 刚刚从clang尝试过,使用:
...(也没有--use-cc
标志)但我得到的只是典型的构建输出,一个例子是:
...最后:
所以要么我的代码是完美的scan-build
,要么它什么也没做。我不确定一个好的测试可能是什么,看看它是否有效。
c - 如何将字符串解析为 C 中的日期时间结构?
我想在 C 中将一个字符串 (char*) 解析为一个 tm 结构。是否有任何内置函数可以做到这一点?
我指的是 C99 标准中的 ANSI C。
c - 创建使用 getaddrinfo 的静态链接二进制文件?
我已经包含了 header netdb.h
,其中getaddrinfo
包含,但 gcc 发出此警告:
如何静态编译缺少的文件?
可能的解决方案:
可能是 glibc 安装缺少静态编译所需的相应目标文件。如果是这种情况,请创建相应的目标文件并在编译时链接它。
尝试使用 EGLIBC 而不是 glibc。
我成功地使用dietlibc 编译了我的程序,该程序编译时没有任何错误,而且生成的二进制文件比glibc 生成的要小得多。
c - 可变长度数组
我想知道如何管理可变长度数组(为了拥有可变长度数组,堆栈中保留了哪些额外的变量或数据结构)。
非常感谢。
c - 主要编译器/工具链中的 C99 支持情况如何?
对我在这里发表的评论的回应让我停下来思考:“我真的不知道 C99 支持的状态是什么。”
Wikipedia 提供了一些编译器的详细信息,但我对 C99 不够熟悉,无法了解标准的所有内容,因此我正在寻找该问题的格式塔概述答案:
主要编译器/工具链中的 C99 支持情况如何?
c - c99 转到过去的初始化
在调试崩溃时,我在一些代码中遇到了这个问题:
当第一个 malloc 失败时会出现问题。因为我们跳过了 的初始化p2
,它包含随机数据并且调用free(p2)
可能会崩溃。
我希望/希望这将被视为与在 C++ 中相同的方式,其中编译器不允许 goto 跳过初始化。
我的问题是:跳过标准允许的初始化还是 gcc 的 c99 实现中的错误?
c - C99 是否保证数组是连续的?
在另一个问题的热门评论线程之后,我开始讨论 C99 标准中关于 C 数组的定义和未定义的内容。
基本上,当我定义一个二维数组时int a[5][5]
,标准 C99 是否保证它将是一个连续的整数块,我可以将它转换为(int *)a
并确保我将拥有一个有效的 25 个整数的一维数组。
据我了解,上述属性隐含在 sizeof 定义和指针算术中,但其他人似乎不同意并说强制转换为 (int*) 上述结构会产生未定义的行为(即使他们同意所有现有实现实际上都分配了连续值)。
更具体地说,如果我们认为一种实现可以检测数组以检查所有维度的数组边界并在访问一维数组时返回某种错误,或者不正确访问第一行以上的元素。这样的实现可以符合标准吗?在这种情况下,C99 标准的哪些部分是相关的。
c - 带有指针的 va_arg
我想用指针参数初始化一个链表,如下所示:
问题是 , 的 clang 错误type name requires a specifier or qualifier
,va_arg(va, (struct structure *))
并说类型说明符默认为 int。它还记录了(struct structure *)
和的实例化形式struct structure *
。这个,似乎被分配到s
的是int (struct structure *)
.
当从 中删除括号时,它编译得很好(struct structure *)
,但是应该初始化的结构是不可访问的。
int
当括号围绕传递给 va_arg 的类型参数时,为什么假定?我怎样才能解决这个问题?
c - 生成二维 vla 以分段错误结束
进一步开发昨天的代码(由函数中的 malloc 和 sscanf 引起的段错误),我尝试在网上找到的一些教程的帮助下生成 2-dim vla。但我在(*data)[i][j]=atof(p);
. 该程序应该从文本文件中读取矩阵并将其加载到二维数组(列 1-9)和一维数组(列 10)中
[示例代码]
[somedatafile.txt 的内容]
linux - 如何使用 make 和编译为 C99?
我正在尝试使用 Makefile 编译 linux 内核模块:
这给了我:
我需要切换到C99。阅读后我注意到我需要添加一个标志 -std=c99,不确定应该添加到哪里。
如何更改 Makefile 使其编译为 C99?