c99相关内容

使用 malloc 分配 char 数组

考虑以下行: char *p = malloc( sizeof(char) * ( len + 1 ) ); 为什么要使用 sizeof(char)?这没有必要,不是吗?还是只是风格问题? 它有什么优势? 解决方案 是的,这是风格问题,因为您希望 sizeof(char) 始终为一. 另一方面,在执行 malloc 时使用 sizeof(foo) 是一种习惯用法,最重要的是 ..
发布时间:2022-01-12 20:43:07 其他开发

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

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

在 C 中使用宏创建伪函数的可能性有多大?

人们总是说宏是不安全的,而且它们没有(直接)对其参数进行类型检查,等等.更糟糕的是:当发生错误时,编译器会给出复杂且难以理解的诊断,因为宏只是一团糟. 是否有可能以与函数几乎相同的方式使用宏,通过进行安全的类型检查,避免典型的陷阱,并且以某种方式编译器给出正确诊断. 我将以肯定的方式回答这个问题(自动回答). 我想向您展示我为这个问题找到的解决方案. 将使用和尊重标准 C99,以具 ..
发布时间:2022-01-11 19:49:04 其他开发

C99 有#define 吗?

我想以一种方式在 C99 中做某事,否则以另一种方式执行.要检查的 #define 是什么? #ifdef C99...#别的...#万一 解决方案 没有特定的 #define 值.只需检查 __STDC_VERSION__ 并自己定义!;-) #if __STDC_VERSION__ >= 199901L/* C99 代码 */#定义C99#别的/* 不是 C99 代码 */#万一#if ..
发布时间:2022-01-11 19:46:43 其他开发

函数的隐式声明 - C99

我目前使用的是 Xcode 4,在我的 .pch 文件中有这个宏:#define localize(s) NSLocalizedString((s), nil). 当我尝试在某个 .m 文件中使用此宏时,我收到以下警告:函数“localize"的隐式声明在 C99 中无效. 这段代码编译没有问题,但我怎样才能解决这个问题,以免收到警告? 解决方案 我在用 DLog 全局替换 NSL ..
发布时间:2022-01-11 19:46:20 移动开发

允许编译器向标准头文件添加函数吗?

是否允许 C 编译器向标准头文件添加函数并仍符合 C 标准? 我在某处读过这个,但我在标准中找不到任何参考,除了附件 J.5: 包含任何可能导致严格符合的扩展程序变为无效会导致实现不合格.此类扩展的示例是新关键字、额外的库函数在标准头文件中声明,或名称为的预定义宏不能以下划线开头. 但是,附件 J 提供信息而不是规范......所以它没有帮助. 所以我想知道一个符合标准的编 ..
发布时间:2022-01-11 16:15:07 其他开发

如何在 C99 多文件项目中声明内联函数?

我想在项目中定义一个内联函数,用c99编译.我该怎么做?当我在头文件中声明函数并在 .c 文件中提供详细信息时,其他文件无法识别该定义.当我将显式函数放在头文件中时,我遇到了问题,因为使用它的所有 .o 文件都有定义的副本,因此链接器给了我一个“多重定义"错误. 我想做的是这样的: header.h内联无效函数(){做事...}lib1.c#include "header.h"...lib ..
发布时间:2022-01-11 15:11:12 其他开发

是否有文档描述 Clang 如何处理过多的浮点精度?

当唯一允许使用的浮点指令是 387 时,几乎不可能 (*) 以合理的成本提供严格的 IEEE 754 语义.当希望保持 FPU 在完整的 64 位有效位上工作以便 long double 类型可用于扩展精度时,尤其困难.通常的“解决方案"是以唯一可用的精度进行中间计算,并在或多或少定义明确的情况下转换为较低的精度. 最新版本的 GCC 根据 Joseph S. Myers 在 2008 年发 ..
发布时间:2022-01-09 10:49:57 其他开发

编译为 C99 时未定义 CRTSCTS

我正在树莓派上编写一些串行代码并切换到 C99.当我这样做时,我开始收到错误消息“错误:‘CRTSCTS’未声明(首次在此函数中使用)" $ c99 -M serial01.c |grep termios.h/usr/include/termios.h/usr/include/arm-linux-gnueabihf/bits/termios.h \$ gcc -M serial01.c |gre ..
发布时间:2022-01-05 10:55:31 其他开发

如何使用 -std=gnu99 编译 Linux 内核模块?

我最近学习了如何编写简单的字符驱动程序,在尝试编写代码时,我注意到我的 C99 代码收到了很多以下 GCC 警告: warning: ISO C90 禁止混合声明和代码 我认为这是因为主 Linux 内核 Makefile 设置为使用非 C99 标准进行编译.我四处搜索我在stackoverflow上找到了这个答案:How使用 make 并编译为 C99? 所以我很自然地在我的 Make ..
发布时间:2022-01-04 22:47:43 服务器开发

C 中的暂定定义和链接

考虑由两个文件组成的C程序, f1.c: int x; f2.c: int x=2; 我阅读了 C99 的第 6.9.2 段标准是这个程序应该被拒绝.在我对 6.9.2 的解释中,变量 x 是在 f1.c 中临时定义的,但是这个临时定义在翻译单元的末尾变成了实际定义,并且(在我看来),因此应该表现得好像 f1.c 包含定义 int x=0;. 使用我能够尝试的所有编译器(以及重 ..
发布时间:2022-01-04 21:10:25 其他开发

使用“sigaction(2)"忽略“SIGCHLD"信号有什么用?

事实证明,我们可以通过指定来防止出现僵尸进程(即,其父进程没有 wait() 等待它到 _exit())SIGCHLD 信号被其父级用 sigaction() 忽略.然而,似乎 SIGCHLD 在默认情况下被忽略.这是怎么回事? int main (void) {struct sigaction sa;sa.sa_handler = SIG_IGN;//通过忽略处理信号sigemptyset(& ..
发布时间:2022-01-02 19:28:39 服务器开发

C - 检查当前可用的可用 RAM?

我知道如何使用 malloc() 和 free() 来分配内存,但是是否也有一个标准的 C 函数来检查剩余多少内存,所以我可以定期调用它以确保我的代码没有内存泄漏? 我唯一能想到的就是在无限循环中调用 malloc(1) 直到它返回错误,但不应该有更有效的方法吗? 解决方案 不,没有标准的 C 函数可以做到这一点.您可以使用一些特定于平台的函数来执行某些类型的查询(例如工作集大小), ..
发布时间:2021-12-31 08:08:50 其他开发

C 中参数数组类型中的“静态"是什么意思?

我看到了下面一些复杂的函数定义. void foo(double A[static 10]) {双 B[10];} C & 是否有效?C++代码?它是 C99 或 C++ 标准引入的新语法吗?它的目的是什么?我应该什么时候使用它?这有什么必要? 解决方案 这个 C99 符号,void foo(double A[static 10]),意味着函数可以假设 A 指向 10 个有效参数(从 ..
发布时间:2021-12-29 20:11:06 其他开发

C/C99/C++/C++x/GNU C/GNU C99 中枚举的签名

enum 类型是有符号的还是无符号的?枚举的符号性是否不同:C/C99/ANSI C/C++/C++x/GNU C/GNU C99? 谢谢 解决方案 枚举保证由整数表示,但实际类型(及其符号)取决于实现. 您可以通过为枚举器之一赋予负值来强制枚举由有符号类型表示: enum SignedEnum { a = -1 }; 在 C++0x 中,可以显式指定枚举的基础类型: e ..
发布时间:2021-12-29 16:25:53 C/C++开发

ftell 在超过 2GB 的位置

在 32 位系统上,如果以二进制模式打开的文件的当前位置指示器超过 2GB 点,ftell 返回什么?在 C99 标准中,这是 未定义的行为,因为 ftell 必须返回一个 long int(最大值为 2**31-1)? 解决方案 on long int long int 应该是至少 32 位,但 C99 标准并没有将其限制为 32 位.C99 标准确实提供了方便的类型,例如 int ..
发布时间:2021-12-29 12:39:23 其他开发