c99相关内容
标准对主要返回值范围有何看法?最多只能说 255 个? 因为 int main(void){返回 256;}回声 $?;# 输出 0 解决方案 标准没说.0、EXIT_SUCCESS 和 EXIT_FAILURE 具有(某种)特定的含义.其他任何事情都取决于实现. 目前,大多数基于 Unix 的系统仅支持 8 位返回值.Windows 支持(至少)32 位返回值.我没有检查过 6
..
令我惊讶的是,我刚刚发现 MS Visual Studio 2003 以上缺少 C99 stdint.h.我相信他们有他们的理由,但有谁知道我可以在哪里下载副本?没有这个标题,我就没有有用类型的定义,比如 uint32_t 等. 解决方案 原来您可以从以下位置下载此标题的 MS 版本: https://github.com/mattn/gntp-send/blob/master/in
..
要真正符合标准,C 中的所有函数(main 除外)都必须有一个原型,即使它们只在同一翻译单元中定义之后使用? 解决方案 这取决于您所说的“真正符合标准"是什么意思.然而,简短的回答是“最好确保所有函数在使用前都有一个范围内的原型". 一个更合格的答案指出,如果函数接受可变参数(特别是 printf() 函数系列),那么原型必须在范围内才能严格符合标准.这适用于 C89(来自 ANSI
..
我想知道是否可以迭代传递给 C99 中的可变参数宏的参数或使用任何 GCC 扩展? 例如是否可以编写一个通用宏,将结构及其字段作为参数传递并打印结构中每个字段的偏移量? 像这样: 结构一个{一个;国际b;国际 c;};/* PRN_STRUCT_OFFSETS 将打印每个字段的偏移量作为第一个参数传递的结构内.*/int main(int argc, char *argv[]){PR
..
Stack Overflow 问题的一些答案 获取IEEE Single-precision bits for a float 建议使用 union 结构进行类型双关(例如:将 float 的位转换为 uint32_t): union {浮动 f;uint32_t u;} 联合国;un.f = your_float;uint32_t 目标 = un.u; 但是,根据 C99 标准(至少草案 n
..
是否有机器(或编译器),其中 sizeof(char) != 1? C99 标准 是否说标准合规性实现上的 sizeof(char) 必须恰好为 1?如果有,请给我章节号和引文. 更新:如果我有一台机器(CPU),它不能寻址字节(最小读取是 4 个字节,对齐),但只有 4 个字节(uint32_t),可以为此编译machinedefine sizeof(char) to 4? size
..
是否有一个 printf 宽度说明符可以应用于浮点说明符,该说明符会自动将输出格式化为必要数量的有效数字,以便在扫描string back in,获取的是原来的浮点值? 例如,假设我将 float 打印到 2 个小数位的精度: float foobar = 0.9375;printf("%.2f", foobar);//打印出 0.94 当我扫描输出 0.94 时,我没有符合标准的保证我
..
我不明白为什么这样做是错误的: const int n = 5;int x[n] = { 1,1,3,4,5 }; 即使 n 已经是一个常量值. 虽然这样做似乎适合 GNU 编译器: const int n = 5;int x[n];/*无初始化*/ 我知道 C99 的 VLA 功能,我认为这与正在发生的事情有关,但是我只需要澄清一下背景中发生的事情. 解决方案 要记住的关键
..
我编写了一个 C 程序,它接受来自用户的整数输入,用作整数数组的大小,并使用该值声明给定大小的数组,我通过检查数组的大小来确认数组. 代码: #include int main(int argc, char const *argv[]){国际n;scanf("%d",&n);int k[n];printf("%ld",sizeof(k));返回0;} 令人惊讶的是它是正确的!该程序能够创
..
我在 C99 中发现了可变长度数组,但看起来它的行为与 malloc + free 几乎相同. 我发现的实际差异: 处理太大的数组: 无符号大小 = 4000000000;int* ptr = malloc(size);//ptr 为 0,程序不会崩溃整数数组[大小];//段错误,程序崩溃 内存泄漏:仅在动态数组分配中可能发生: int* ptr = malloc(size);.
..
n3639 提议采纳c99的variable-length-arrays 到 C++14(至少对于第一维.) 但是 我最新的能够找到列出n3639为: C++14 的第一张 CD 中的特性,随后被移除到技术规范中 这是否曾经成为技术规范,还是在交付过程中丢失了? 我的问题的原因是,我注意到了这段代码: void f(size_t n) {int a[n];for (siz
..
比较 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 相同的数组.我用谷歌搜索了一段时间,没有找到满意的答案. 我意识到这是一个初学者的问题,感谢您的耐心等待
..
显然以下函数原型在 C99 和 C11 中有效: void foo(int a[const *]);void bar(int a[static volatile 10]); 那些奇怪的下标符号*、static和CV限定符的目的是什么? 它们是否有助于区分静态类型数组和可变长度数组?或者它们只是语法糖? 解决方案 static in parameter array declarat
..
在 C 中创建负长度数组时会发生什么? 例如: int n = -35;int testArray[n];for(int i = 0; i 此代码将编译(并且在启用 -Wall 时不会出现警告),而且您似乎可以毫无问题地分配给 testArray[0].分配过去会导致段错误或非法指令错误,并从数组中读取任何内容都会说“中止陷阱"(我不熟悉那个).我意识到这有点学术性,并且(希望)永远不
..
对于数组衰减为指针的情况,规则如下: 出现在表达式中的array-of-T类型的左值[见问题2.5]衰减(三个例外)为指向其第一个元素的指针;结果指针的类型是指向T的指针. (例外情况是数组是 sizeof 或 & 运算符的操作数,或者是字符数组的文字字符串初始值设定项.) 如何理解数组是“字符数组的文字字符串初始化器"的情况?请举个例子. 谢谢! 解决方案 数组不
..
在另一个问题的热门评论线程之后,我开始讨论 C99 标准中关于 C 数组的定义和未定义的内容. 基本上,当我定义一个像 int a[5][5] 这样的二维数组时,标准的 C99 是否保证它将是一个连续的整数块,我可以将它转换为 (int *)a 并确保我将拥有一个有效的 25 个整数的一维数组. 据我了解,上述属性隐含在 sizeof 定义和指针算术中,但其他人似乎不同意并表示将上述结
..
有很多类似的问题,但我仍然找不到与 C99/C11 中可变长度数组的特性相关的任何答案. 如何将多维变长数组传递给 C99/C11 中的函数? 例如: void foo(int n, int arr[][])//
..
我有以下代码行: for ( int i = index; i size; ++i )//i,index 和 size 都是整数.al 是一个数组列表 当我用 C 编译时,出现错误: 'for' 循环初始声明仅在 C99 模式下允许 我不确定如何解决这个问题. 谢谢! 解决方案 要么在循环外声明迭代器: int i;for (i = index; i size
..
在 C 中,我相信以下程序是有效的:将指向已分配内存缓冲区的指针转换为这样的数组: #include #include #define ARRSIZE 4int *getPointer(int num){返回 malloc(sizeof(int) * num);}int main(){int *pointer = getPointer(ARRSIZE);int (*arrPointer)[ARR
..
C99标准的 7.18.1.4 部分: 以下类型指定了一个无符号整数类型,其属性是可以将指向 void 的任何有效指针转换为该类型,然后再转换回指向的指针 void ,结果将等于原始指针: uintptr_t 这是否意味着只能将 void * 类型转换为 uintptr_t 并返回,而无需更改原始指针的值? 特别是,我想知道是否需要以下代码才能使用 uintptr_t :
..