写代码,写得头痛

这几天写代码,写得我有些头痛,主要是写的代码太多,太烦了。
本来想给我的软件加上一个白板的功能,可白板一般就用sharedobject来做。
可我自已写的fms,不支持sharedobject ,所以就得实现sharedobject。
这个协议倒是很容易就让我分析透了,可后面发现的问题,就让我有些心虚了。
amf0编码,竞然不支持flex.messaging.io.ArrayCollection,也就是flex里面的mx.collections.ArrayCollection对象,这种对象用amf0没办法编码。
如果我想把sharedobject用得很爽的话,那就只有实现amf3,那也就意味着,我的服务器要全面升级从以前的只支持amf0到支持amf3,以前的
NetConnection
NetStream部分都要改,工作量可真大,实现amf3编解码也不是一件简单的事。
amf3中提示了一个引用的概念,这也就意味着,我需要对对amf3对象的实例进行标识,没有语言内置的支持,写个这个还真是复杂。
写些基本的类型的编解码还是比较简单的。
像xml,object实在是复杂,想想还是觉得amf0里面解析一个对象比较容易。
都说amf3比amf0编码要压缩很多,从编码来上说的确是这样。
但是,amf3编码里面的引用的作用域只在处理一个rtmp包上,
如果连接开始amf3编码器起来开始,连接关闭编码器里面的引用什么的才消失还差不多。
amf3给我们带来的只是复杂,还好,一切都好了,复杂也复杂后面的人去吧。
amf3里面的ByteArray,还算是个不错的东西,如果你的什么数据不想让服务器解析就直接让这个装着吧,这个类型解析起来也很简单。
ByteArray实际上也就是一个amf3的编解码器,用这个什么数据都可以装,也不用担心解析出错,真是降低了写服务器的复杂度啊。 
<think>嗯,用户在用C语言代码时遇到了没有报错但也没有结果的情况,这确实挺让人头疼的。首先,我得回忆一下常见的可能原因。可能用户是初学者,所以需要从基础的地方开始检查。 首先,有没有忘记main函数?没有main函数的话,程序就不会执行。或者main函数的返回值类型是否正确,比如应该是int main()而不是void main(),虽然有些编译器允许void,但标准法是int。 然后,程序里有没有输出语句?比如printf有没有被正确调用,格式是否正确。有时候可能漏了\n换行符,导致输出在缓冲区里没显示出来,尤其是在某些环境下需要刷新缓冲区,比如用fflush(stdout)或者在printf后加\n。 另外,代码里是否有死循环或者长时间的操作,导致程序卡住,看起来像没输出?比如一个无限循环或者等待输入但没提示,用户不知道程序在等待输入。这时候需要检查循环条件和输入语句,比如scanf有没有正确处理。 还有可能是编译或运行的问题。比如编译成功但运行的时候没正确执行,可能路径不对或者生成的exe文件有问题。用户是否在IDE里直接运行,还是手动执行?有时候需要检查编译器的设置,或者重新编译一次。 还有可能代码逻辑有问题,比如条件判断错误,导致预期的输出部分没有执行。比如if语句的条件反了,或者变量值不符合预期。这时候需要逐步调试,或者加一些调试输出,确认程序执行流程。 还有内存相关的问题,比如数组越界或者未初始化的指针,导致程序崩溃,但可能在某些环境下不报错。这种情况需要用调试工具检查,或者加错误处理的代码。 总之,没有报错但没结果,通常和输出语句、程序流程、编译运行环境有关。需要用户提供代码片段,才能更具体地分析。但作为一般性建议,可以按上述步骤排查。</think>在C语言编程中,出现代码无报错但无运行结果的情况,通常与以下原因有关,可按以下步骤排查: --- ### 一、检查输出相关代码 1. **缺少输出语句** ```c // ❌ 错误示例:计算后没有输出 int sum = 1 + 2; // ✅ 修正方案 printf("Sum = %d\n", sum); // 必须包含输出语句 ``` 2. **缓冲区未刷新** - 未使用换行符 `\n` 或 `fflush(stdout)` ```c // ❌ 输出可能卡在缓冲区 printf("Loading..."); // ✅ 修正方案(二选一) printf("Loading...\n"); // 方案1:添加换行符 fflush(stdout); // 方案2:强制刷新缓冲区 ``` --- ### 二、检查程序入口与流程 1. **main函数缺失或错误** ```c // ❌ 错误法 void main() { ... } // ✅ 正确法 int main() { // 代码逻辑 return 0; } ``` 2. **程序提前终止** ```c int main() { if(1 > 0) return 0; // ❌ 条件永远成立,后续代码不执行 printf("This won&#39;t show"); return 0; } ``` --- ### 三、处理阻塞问题 1. **等待输入未提示** ```c // ❌ 用户不知需要输入 int num; scanf("%d", &num); // 程序在此卡住等待输入 // ✅ 修正方案 printf("Enter a number: "); scanf("%d", &num); ``` 2. **无限循环** ```c while(1) { // ❌ 没有退出条件 } // ✅ 修正方案 int count = 0; while(count < 10) { printf("%d\n", count); count++; } ``` --- ### 四、编译与执行问题 1. **未重新编译** - 修改代码后未重新编译,执行的是旧版本程序 2. **杀毒软件拦截** - 部分安全软件可能阻止生成的.exe文件运行 --- ### 五、调试建议 1. **添加调试输出** ```c printf("=== Reached point A ===\n"); // 标记执行位置 ``` 2. **使用调试工具** - 在VS/Code::Blocks等IDE中使用断点调试 - 命令行调试:`gdb your_program` --- ### 六、典型示例分析 ```c #include <stdio.h> int main() { int i = 0; // 错误1:缺少循环体大括号,导致死循环 while(i < 10); // ❌ 注意结尾的分号! { printf("%d\n", i); // 永远不会执行 i++; } return 0; } ``` **问题说明**:`while(i < 10);` 后的分号导致空循环体,实际等效于: ```c while(i < 10) { /* 空语句 */ } // 后续代码块与循环无关 ``` --- **排查清单**: 1. 检查所有`printf`语句是否存在且位置正确 2. 确认`main`函数正确定义 3. 查找是否有意外分号导致代码块失效 4. 使用`fflush(stdout)`强制输出 5. 检查程序是否在等待未处理的输入 建议提供具体代码片段以便更精准分析问题根源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值