问题标签 [c89]
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 - 如何在 ansi C90 中捕获运行时错误
我正在使用库 Function ConnectToTCPServer。当主机不可达时,该函数超时。在这种情况下,应用程序崩溃并出现以下错误:“NON-FATAL RUN-TIME ERROR: "MyClient.c", line 93, col 15, thread id 0x000017F0: Library function error (return value == -11 [0xfffffff5]) . 超时错误"
Errorcode 11 是一个超时错误,所以这可能在我的应用程序中经常发生 - 但是应用程序崩溃 - 我想捕捉这个错误而不是让我的应用程序崩溃。
如何在 Ansi C90 中捕获此运行时错误?
编辑:这是当前使用的代码片段:
和
回调函数永远不会被调用。我的服务器没有运行,所以 ConnectToTCPServer 将超时。我会怀疑回调被调用 - 但它从未被调用。
编辑2:实际上没有调用回调函数,ConnectToTCPServer的返回值包含相同的错误信息。我认为ConnectToTCPServer抛出此错误可能是一个错误。我只需要抓住它并将其放入 C90 中即可。有任何想法吗?
编辑 3:我测试了回调函数,在我的服务器在线的罕见情况下,实际调用了回调函数 - 这无济于事,因为发生错误时不会调用回调。
gcc-warning - 编译 C90 代码时在 gcc 编译器中收到警告“ISO C90 禁止可变大小数组”
我正在 gcc 中编译我的 C90 c 代码。我ISO C90 forbids variable-size array
在做出类似声明时收到警告
int symbols[nc];
其中 nc 是整数,其值是从输入文件中读取的。输入文件上的值是多种多样的,所以我不能保持一个恒定的值。我怎样才能摆脱它?是否确实有必要解决此警告,或者我们可以简单地忽略它?
提前致谢。
c - 在 C90 中格式化输入(删除前导零和小数位)?
我想用这个程序做的是输入一个任意数字一次读取一个字符,然后将其格式化为一个 int 以便我可以使用它(不想使用 printf 格式)另外,我只是允许使用 getchar 和 printf 进行此分配。
样本输入:0001234.5
编辑期望输出:<1234>(5) 实际输出:0001234050
我觉得我正处于顿悟的风口浪尖,但我遇到了障碍,请帮忙?
*编辑我忘了提到我要的 END 结果是将非十进制数括在 <1234> 中,将十进制数括在括号中 (5)
c - 带有基本参数的 strtod
我不想不必要地重新发明轮子,但我一直在寻找 strtod 的功能,但有一个基本参数 (2,8,10,16)。(我知道 strtoul 允许使用基本参数,但我正在寻找返回类型 double)。任何正确方向的建议/指示?谢谢。
c - 如何找到我当前编译器的标准,比如它是 C90 等
我正在使用 Linux 机器。是否有任何系统命令可以找到我正在使用的 C 编译器所遵循的标准?
c - C 的哪些部分最便携?
我最近阅读了对 Lua 联合创始人 Luiz H. de Figueredo 和 Roberto Ierusalimschy 的采访,他们讨论了 Lua 的设计和实现。至少可以说非常有趣。然而,讨论的一部分让我想到了一些事情。Roberto 将 Lua 称为“独立应用程序”(也就是说,它是纯粹的 ANSI C,不使用操作系统中的任何内容。)他说,Lua 的核心是完全可移植的,并且由于它的纯洁性,它可以被大量移植更容易,甚至从未考虑过的平台(例如机器人和嵌入式设备)。
现在这让我想知道。C 通常是一种非常可移植的语言。那么,C 的哪些部分(即标准库中的部分)是最不可移植的?哪些可以在大多数平台上运行?是否应该只使用一组有限的数据类型(例如避免short
和可能float
)?FILE
和stdio
系统呢?malloc
和free
?Lua 似乎避免了所有这些。这是把事情推向极端吗?还是它们是可移植性问题的根源?除此之外,还可以做哪些其他事情来使代码具有极强的可移植性?
我问所有这些的原因是因为我目前正在用纯 C89 编写一个应用程序,并且它尽可能便携是最佳选择。我愿意在实现它时采取中间道路(足够便携,但没有那么多我必须从头开始编写所有内容。)无论如何,我只是想看看一般来说什么是编写最好的 C 代码的关键。
最后一点,所有这些讨论都只与 C89 相关。
c - 如何在 C90 中分配可变大小的数组?
我需要为符号分配一个可变大小,
typedef int SYMBOL
我按照以下方式做了
SYMBOL test[nc]
, 这里 nc
是一个整数。但这给了我以下警告:
ISO C90 forbids variable-size array
我怎么能在没有收到警告的情况下做到这一点?
谢谢, 特纳
c - 将 M_PI 与 C89 标准一起使用
我正在使用 C 并试图访问常量 M_PI (3.14159 ...)。我已导入 math.h 头文件,但 M_PI 常量仍未定义。通过对 StackOverflow 的一些搜索,我发现我需要添加#define _USE_MATH_DEFINES
到我的代码中(参见下面的示例代码)。这在正常编译时工作正常,但我需要能够使用std=c89
标志编译我正在做的工作。
我应该如何从一些 C89 代码访问 M_PI?
c - ANSI C 不允许在固定时间段后在同一位置打印每个字符吗?
我正在尝试生成要在控制台上打印的随机数。我在 Linux 上用 C 语言编程。我想在每个数字的一秒时间间隔后在一个地方打印所有数字。
我正在使用sleep()
停止“时间间隔”。我试过了\b
,\r
但没有任何效果。
我只是想让它运行,例如:
c - 在 MS Visual C++ 中启用 VLA(可变长度数组)?
如何启用 VLA、C99 中定义的可变长度数组、MS Visual C++ 或根本不可能的使用?
是的,我知道 C++ 标准基于 C89,并且 VLA 在 C89 标准中不可用,因此在 C++ 中不可用,但 MSVC++ 也应该是 C 编译器,可以使用 / TC 编译器参数 ( Compile as C Code (/TC)
)。但是这样做似乎并没有启用 VLA,并且编译过程在构建为 C++ ( Compile as C++ Code (/TP)
) 时会失败并出现相同的错误。也许 MSVC++ C 编译器只兼容 C89,或者我遗漏了一些东西(一些特殊的构造或编译指示/定义)?
代码示例:
编译错误:
错误 C2057:预期的常量表达式
错误 C2466:无法分配常量大小 0 的数组
错误 C2133:“pc”:未知大小