什么是更好的主意:编写将在C11或C99中被其他人使用的库?许多人宁愿在CIS项目中使用C99而不是C11,这是否是正确的理由?什么对微控制器更好?我不专业,我想有充分的借口不使用通用C11:P谢谢你的帮助.我希望这不是'愚蠢'的问题.
我正在制作2D射击游戏,因此我必须在阵列中填充许多子弹,包括它们的位置,以及它们的位置.
所以我有两个问题,一个是内存使用,特别是编写的数组不会使事情不对齐,导致大量的填充或对齐,这使得计算的速度变得很糟糕.
第二是计算速度.
首先,这意味着选择整数或浮点数...现在我将使用整数(如果有人认为浮点数更好,请说出来).
那么,这也意味着选择那种类型的变体(8位?16位?C混淆默认值?CPU字大小?单精度?双精度?)
因此问题是:在现代处理器中C中哪种类型最快(即:常见的x86,ARM和其他流行的处理器,不用担心Z80或36位处理器),以及在使用速度和内存时使用哪种类型更合理帐户?
签名和未签名的速度有差异吗?
编辑是因为关闭投票:是的,它可能是过早优化,但我不仅要求CPU使用,而且要求内存使用(可能会有很大差异),我也在做项目来锻炼我的C技能,这是几年我不用C编码,我想有一些乐趣并找到限制并拉伸它们,并且还学习新标准(上次我使用C它仍然是C89).
最后,当我发现新的标准中存在一些新的有趣类型(如int_fast*_t)时,提出这个问题的主要动机就是黑客的好奇心.
但如果你仍然认为这不值得问,那么我可以删除这个问题并仔细阅读标准和一些书籍,自己学习.如果其他人有一天有同样的好奇心,那不是我的问题.
请考虑以下程序:(请参阅此处的实时演示).
#include <stdio.h>
struct Test
{
int a;
};
typedef struct Test t;
typedef struct Test t;
int main()
{
t T={9};
printf("%d",T.a);
}
Run Code Online (Sandbox Code Playgroud)
该程序在C11编译器中编译良好,但在C99编译器中编译失败.为什么?是什么原因?我的编译器gcc 4.8.1给出以下警告:
[Warning] redefinition of typedef 't' [-Wpedantic]
[Note] previous declaration of 't' was here
Run Code Online (Sandbox Code Playgroud) 为什么C标准包含许多不安全的功能,例如,它们是无用的(在良好的程序中它们不使用)并且有害getchar?为什么C标准不包含它们的有用功能,例如getch,和getche?这只是众多例子中的一个......
UPD我很困惑:gets而不是getchar.