c99相关内容

main函数的返回值范围

标准对主要返回值范围有何看法?最多只能说 255 个? 因为 int main(void){返回 256;}回声 $?;# 输出 0 解决方案 标准没说.0、EXIT_SUCCESS 和 EXIT_FAILURE 具有(某种)特定的含义.其他任何事情都取决于实现. 目前,大多数基于 Unix 的系统仅支持 8 位返回值.Windows 支持(至少)32 位返回值.我没有检查过 6 ..
发布时间:2021-12-02 08:29:55 其他开发

C99 stdint.h 头文件和 MS Visual Studio

令我惊讶的是,我刚刚发现 MS Visual Studio 2003 以上缺少 C99 stdint.h.我相信他们有他们的理由,但有谁知道我可以在哪里下载副本?没有这个标题,我就没有有用类型的定义,比如 uint32_t 等. 解决方案 原来您可以从以下位置下载此标题的 MS 版本: https://github.com/mattn/gntp-send/blob/master/in ..
发布时间:2021-12-02 08:26:38 C/C++开发

C89、C90 或 C99 中的所有函数都需要原型吗?

要真正符合标准,C 中的所有函数(main 除外)都必须有一个原型,即使它们只在同一翻译单元中定义之后使用? 解决方案 这取决于您所说的“真正符合标准"是什么意思.然而,简短的回答是“最好确保所有函数在使用前都有一个范围内的原型". 一个更合格的答案指出,如果函数接受可变参数(特别是 printf() 函数系列),那么原型必须在范围内才能严格符合标准.这适用于 C89(来自 ANSI ..
发布时间:2021-12-02 08:17:59 其他开发

是否可以在可变参数宏中迭代参数?

我想知道是否可以迭代传递给 C99 中的可变参数宏的参数或使用任何 GCC 扩展? 例如是否可以编写一个通用宏,将结构及其字段作为参数传递并打印结构中每个字段的偏移量? 像这样: 结构一个{一个;国际b;国际 c;};/* PRN_STRUCT_OFFSETS 将打印每个字段的偏移量作为第一个参数传递的结构内.*/int main(int argc, char *argv[]){PR ..
发布时间:2021-12-02 08:12:02 其他开发

是否有机器,其中 sizeof(char) != 1,或至少 CHAR_BIT >8?

是否有机器(或编译器),其中 sizeof(char) != 1? C99 标准 是否说标准合规性实现上的 sizeof(char) 必须恰好为 1?如果有,请给我章节号和引文. 更新:如果我有一台机器(CPU),它不能寻址字节(最小读取是 4 个字节,对齐),但只有 4 个字节(uint32_t),可以为此编译machinedefine sizeof(char) to 4? size ..
发布时间:2021-12-01 23:58:00 其他开发

printf 宽度说明符以保持浮点值的精度

是否有一个 printf 宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要数量的有效数字,以便在扫描string back in,获取的是原来的浮点值? 例如,假设我将 float 打印到 2 个小数位的精度: float foobar = 0.9375;printf("%.2f", foobar);//打印出 0.94 当我扫描输出 0.94 时,我没有符合标准的保证我 ..
发布时间:2021-12-01 23:45:48 其他开发

为什么 int x[n] 是错误的,其中 n 是一个常量值?

我不明白为什么这样做是错误的: const int n = 5;int x[n] = { 1,1,3,4,5 }; 即使 n 已经是一个常量值. 虽然这样做似乎适合 GNU 编译器: const int n = 5;int x[n];/*无初始化*/ 我知道 C99 的 VLA 功能,我认为这与正在发生的事情有关,但是我只需要澄清一下背景中发生的事情. 解决方案 要记住的关键 ..
发布时间:2021-11-18 05:06:09 其他开发

编译器在编译时不知道大小如何分配内存?

我编写了一个 C 程序,它接受来自用户的整数输入,用作整数数组的大小,并使用该值声明给定大小的数组,我通过检查数组的大小来确认数组. 代码: #include int main(int argc, char const *argv[]){国际n;scanf("%d",&n);int k[n];printf("%ld",sizeof(k));返回0;} 令人惊讶的是它是正确的!该程序能够创 ..
发布时间:2021-11-18 04:54:59 其他开发

什么时候在 C 中使用变长数组,但是什么时候动态分配呢?

我在 C99 中发现了可变长度数组,但看起来它的行为与 malloc + free 几乎相同. 我发现的实际差异: 处理太大的数组: 无符号大小 = 4000000000;int* ptr = malloc(size);//ptr 为 0,程序不会崩溃整数数组[大小];//段错误,程序崩溃 内存泄漏:仅在动态数组分配中可能发生: int* ptr = malloc(size);. ..
发布时间:2021-11-18 04:30:26 其他开发

C++14 中的可变长度数组?

n3639 提议采纳c99的variable-length-arrays 到 C++14(至少对于第一维.) 但是 我最新的能够找到列出n3639为: C++14 的第一张 CD 中的特性,随后被移除到技术规范中 这是否曾经成为技术规范,还是在交付过程中丢失了? 我的问题的原因是,我注意到了这段代码: void f(size_t n) {int a[n];for (siz ..
发布时间:2021-11-18 04:23:44 C/C++开发

比较两个相同长度的 int 数组的最佳方法?

比较 int 数组 b 和 c 与 a 的最佳方法是什么: int a[] = {0,1,0,0,1};int b[] = {0,1,0,0,1};int c[] = {1,1,0,0,1}; b 和 c 只是示例,假设它们可以是 0 和 1 的任意组合. 我正在尝试检测与 a 相同的数组.我用谷歌搜索了一段时间,没有找到满意的答案. 我意识到这是一个初学者的问题,感谢您的耐心等待 ..
发布时间:2021-11-18 04:12:42 其他开发

声明一个负长度的数组

在 C 中创建负长度数组时会发生什么? 例如: int n = -35;int testArray[n];for(int i = 0; i 此代码将编译(并且在启用 -Wall 时不会出现警告),而且您似乎可以毫无问题地分配给 testArray[0].分配过去会导致段错误或非法指令错误,并从数组中读取任何内容都会说“中止陷阱"(我不熟悉那个).我意识到这有点学术性,并且(希望)永远不 ..
发布时间:2021-11-18 02:34:20 其他开发

字符数组的文字字符串初始值设定项

对于数组衰减为指针的情况,规则如下: 出现在表达式中的array-of-T类型的左值[见问题2.5]衰减(三个例外)为指向其第一个元素的指针;结果指针的类型是指向T的指针. (例外情况是数组是 sizeof 或 & 运算符的操作数,或者是字符数组的文字字符串初始值设定项.) 如何理解数组是“字符数组的文字字符串初始化器"的情况?请举个例子. 谢谢! 解决方案 数组不 ..
发布时间:2021-11-18 02:23:59 其他开发

C99 是否保证数组是连续的?

在另一个问题的热门评论线程之后,我开始讨论 C99 标准中关于 C 数组的定义和未定义的内容. 基本上,当我定义一个像 int a[5][5] 这样的二维数组时,标准的 C99 是否保证它将是一个连续的整数块,我可以将它转换为 (int *)a 并确保我将拥有一个有效的 25 个整数的一维数组. 据我了解,上述属性隐含在 sizeof 定义和指针算术中,但其他人似乎不同意并表示将上述结 ..
发布时间:2021-11-18 02:16:12 其他开发

将此代码行转换为 C

我有以下代码行: for ( int i = index; i size; ++i )//i,index 和 size 都是整数.al 是一个数组列表 当我用 C 编译时,出现错误: 'for' 循环初始声明仅在 C99 模式下允许 我不确定如何解决这个问题. 谢谢! 解决方案 要么在循环外声明迭代器: int i;for (i = index; i size ..
发布时间:2021-11-18 00:46:35 其他开发

在将指针转换为uintptr_t之前需要转换为void *吗?反之亦然?

C99标准的 7.18.1.4 部分: 以下类型指定了一个无符号整数类型,其属性是可以将指向 void 的任何有效指针转换为该类型,然后再转换回指向的指针 void ,结果将等于原始指针: uintptr_t 这是否意味着只能将 void * 类型转换为 uintptr_t 并返回,而无需更改原始指针的值? 特别是,我想知道是否需要以下代码才能使用 uintptr_t : ..
发布时间:2021-05-28 20:16:35 其他开发