c99相关内容

atexit是否有害?

在诸如图书馆之类的大型项目中使用 atexit 有内在的危险吗? 如果是的话,那是什么?是关于 atexit 背后的技术性质的,它可能导致大型项目出现问题? 解决方案 我避免在库中使用 atexit 的主要原因是对它的任何使用都涉及全局状态。一个好的图书馆应该避免具有全局状态。 但是,还有其他技术原因: 实现仅需支持少量(我认为是32个) atexit 处理程序。之后,可 ..
发布时间:2020-09-28 04:14:49 其他开发

为什么在C的相等表达式中不允许使用结构?

无法将结构用作比较操作数是C语言中最明显的事情之一,对我来说,这没有太大意义。可以按值传递结构,也可以通过赋值复制结构,但是未为它们指定 == 。 下面是C11标准的相关部分(草稿),它们定义了相等运算符的约束条件( == 和!= )和简单赋值运算符( = )。请注意,在相等运算符的约束中缺少结构和联合。 (除了不处理 _Atomic 之外,C99中的措辞是相同的。) 6.5.9相等运 ..
发布时间:2020-09-28 04:14:46 其他开发

在哪里可以找到每个C99字符集的所有字符的表?

我正在为以下C个字符集中的每个字符寻找一个表(或生成一个表的方法): 基本字符集 基本执行字符集 基本源字符集 执行字符集 扩展字符集 源字符集 C99在第5.2.1节中提到了所有这六个。但是,我发现它很难阅读且缺乏详细说明。 它唯一定义的唯一字符集是基本执行字符集 strong>和基本源字符集: 52个大写和小写字母 拉丁字母: ABCDEFGHIJKL ..
发布时间:2020-09-28 04:14:42 其他开发

更好地理解c中可变参数的类型提升

在c中调用变量参数函数时,整数参数提升为int,浮点参数提升为double 原型没有指定可选参数的类型,在调用可变参数函数时,默认参数提升是对可选参数值执行的。这意味着将 char 或 short int 类型的对象(无论是否已签名)提升为 int 或 unsigned int (视情况而定);并且类型 float 的对象被提升为类型 double 。因此,如果调用方将 char 作为可选参 ..
发布时间:2020-09-28 04:14:39 其他开发

如何在C中返回匿名结构?

尝试一些代码后,我意识到可以编译以下代码: struct {int x, y; } foo(void){ } 似乎我们在定义一个名为 foo ,它返回匿名的 struct 。 现在,我的问题是:它是否只在使用我的编译器进行编译时使用?或者这是合法的C(99)?如果是这样,则return语句的正确语法是什么,如何正确地将返回值分配给变量? 解决方案 ..
发布时间:2020-09-28 04:14:35 其他开发

是否有任何实现支持负零或将其保留为陷阱表示的实现?

在当今的大多数实现中,带符号的整数值的符号位模式为1,而值为0的位模式都倾向于表示该带符号的整数类型的最低值。 但是,如 6.2.6.2 p2 指出,这不是必需条件: 其中哪些适用于实现定义,带符号的值是否也是如此位1和所有值位为零(对于前两个),或带符号位和所有值位为1(对1的补码),是陷阱表示形式或正常值。 我的第一个问题很简单:是否有任何使用此位模式表示负零或陷阱表示的实现 ..
发布时间:2020-09-28 04:14:33 其他开发

如何在Codeblocks10.05中进入C99模式?

我最近意识到在收到编译错误后我甚至都不处于C99模式 'for'循环只允许初始声明在C99模式下 我找到了一些有关如何通过快速搜索进入C99的建议,该建议告诉我去项目->属性... 但是,它变灰了,我不确定这是否是修复它的正确方法(可能不可用,因为我的文件不是项目,它是正常的源文件。 )。我也看到过很多类似的问题要启用C99模式,因此我查看了编译器标志菜单,但看不到任何有关C99的信息 ..
发布时间:2020-09-28 04:13:31 其他开发

是否允许/正确定义零长度可变长度数组?

我正在C99中编程,并且在代码的一部分中使用了可变长度数组。我知道在C89中不允许使用零长度数组,但是我不确定C99和可变长度数组。 简而言之,以下定义明确的行为是吗? int main() { int i = 0; char array [i]; 返回0; } 解决方案 不,零长度数组被C语言明确禁止,即使它们是通过运行时大小值(如您的代码示例中)作为V ..
发布时间:2020-09-28 04:13:30 其他开发

C89 / C90,C99和C11的兼容性

我刚刚阅读: C Wikipedia条目。据我所知,有3种不同版本的C被广泛使用:C89,C99和C11。我的问题涉及不同版本的源代码的兼容性。 假设我要编写一个程序(由于它是最新版本,请使用C11)并导入一个用C89编写的库。根据C11规范编译所有文件时,这两个版本是否可以正常工作? 问题1 : 较新的C版本,即较旧的C版本的C99,C11超集?通过超集,我的意思是,当按照较新的C规范 ..
发布时间:2020-09-28 04:12:28 其他开发

C11和C99中的临时对象的生存期

我正试图破译注释导致C99和C11之间发生了变化。 该注释中提议的更改最终出现在C11的6.2.4:8中,即: 一个非左值表达式,带有结构或联合类型,其中 结构或联合包含具有数组类型的成员(包括 递归,所有包含的结构和联合的成员)将 指向具有自动存储期限的对象,并且暂时的寿命。 其生命周期始于对表达式求值,并且其初始 值为表达式的值。当包含完整表达式或完整声明符的 评估结束时, ..
发布时间:2020-09-28 04:12:24 其他开发

C99的所有功能是否也在C ++中?

此页面列出了53个新功能在C99中(即它们在C99中,但不在C89中)。所有这些功能都在C ++中吗?甚至C ++ 98吗? 如果不是,哪些功能在C ++中,哪些不可用? 解决方案 C ++(ISO 14882:2017)完全支持以下C99(ISO 9899:1999)功能: (尽管是库标头将是 而不是 : 和 ..
发布时间:2020-09-28 04:12:23 C/C++开发

c99和c11之间的区别

我正在学习c。 这本书是基于C99的。我想在完成本书后将自己的知识更新为C11,或者如果存在重大差异,请更改资源。因此,我要的是一种解释或资源来更新我的知识。我只找到了此来源。但是,它似乎不包含我需要或不简洁的信息。 预先感谢。 P.S:我想学习C11,因为我认为这是目前流行的标准。否则,请通知我。 解决方案 C11标准的良好概述: https://en.wikipedia. ..
发布时间:2020-09-28 04:11:21 其他开发

在C89模式下编译时,下面的程序如何输出C89;在C99模式下编译时,下面的程序如何输出?

我已经从网上找到了这个C程序: #include int main(){ printf(“ C%d\n”,(int)(90-(-4.5 // ** / -4.5))); 返回0; } 此程序的有趣之处在于,它在C89中编译并运行时模式,它会打印 C89 ,并且在以C99模式编译并运行时,它会打印 C99 。但是我无法弄清楚这个 ..
发布时间:2020-09-28 04:10:18 其他开发

使用CMake创建VS Project后出现rint()问题

我在编译代码时遇到问题-特别是 METIS-串行图分区和填充减少矩阵排序。 我已经成功地使Visual Studio 2013 Project脱离了源文件有两种方式:使用CMake GUI(版本3.4.3)和使用命令行。 但是,在两种情况下,当我尝试在Visual Studio中构建创建的项目时,我收到错误消息:错误C2059:语法错误:'('上 _CRTIMP double ..
发布时间:2020-09-28 04:10:15 其他开发

使用printf将int转换为char

我只是想知道以下是否是转换int以将其显示为字符的正确方法 #include< ; stdio.h> int main() { int x = 500; printf(“%hhd\n”,x); } 此外,从上面我想知道是否应该执行以下操作来显示值 #include。 int main() { char c = ..
发布时间:2020-09-28 04:10:12 其他开发

函数“ execle”错误的隐式声明

我不断得到 函数'execle'的隐式声明在C99中无效 编译以下代码时。我想念什么? #include #include char * my_env [] = {“ JUICE = PEACH and apple”,NULL}; int main(int argc,char * argv []) { execl ..
发布时间:2020-09-28 04:10:06 其他开发

为什么在strcpy上没有分段错误?

可能重复: 未定义,未指定和实现定义的行为 这应该隔离故障。为什么呢? #include #include “; char str1 [] =”示例字符串。示​​例字符串。示​​例字符串。示​​例字符串。示​​例字符串。 char str2 [2]; int main() { strcpy(str2,str1 ..
发布时间:2020-09-28 04:10:02 其他开发

用gcc编译器隐式int和函数的隐式声明

我在c99 Standard中阅读: -删除隐式函数声明, -remove隐式int。 但是当我尝试使用-pedantic在c99模式下使用gcc编译器编译此代码时 main(void){ f(3); 返回0; } int f(int a){ .... } 我预计会有2个错误,但我仅收到2条警告: -warni ..
发布时间:2020-09-28 04:09:59 其他开发

C固定大小的数组被视为可变大小

我一直试图定义一个静态数组,其大小在编译时就应该知道(这是一个常量表达式)。当gcc包含浮点常量时,似乎无法确定数组的大小(并且我得到“ ...的存储大小不是恒定的”)。 这是一个最小的示例: int main(void) { static int foo [( unsigned)(2 / 0.5)]; 返回0; } 此行为的原因是什么? 编辑 ..
发布时间:2020-09-28 04:09:55 其他开发