Questions tagged «c»

C是用于操作系统,游戏和其他高性能工作的通用计算机编程语言。

4
为什么用C发明short,int和long?
我无法理解,是什么创造的确切目的short,int以及long在C数据类型? 我问的原因是,似乎它们的大小似乎没有界限-例如,它们可以是任意大小,只要short小于即可int。 那么,在哪种情况下,如果您不希望二进制兼容,则应该使用unsigned int或unsigned long而不是来代替size_t? (如果您不知道大小,那么您如何知道何时选择哪个?)
16 c  data-types 

5
为什么用这种方式设计数组,指针和函数的C语法?
看过(问!)之后,有很多类似的问题 int (*f)(int (*a)[5])在C 中是什么意思? 甚至看到他们制作了一个程序来帮助人们理解C语法,我不禁想知道: 为什么用这种方式设计C的语法? 例如,如果我正在设计指针,我会将“指向10个元素的指针数组的指针”转换为 int*[10]* p; 而不是 int* (*p)[10]; 我觉得大多数人都同意,这要简单得多。 所以我想知道,为什么这种不直观的语法?语法是否解决了我未意识到的特定问题(也许有歧义?)?
16 c  syntax 

4
增强我的C / C ++代码级别
我已经编程3-4年了,觉得不能再被称为初学者了,但是我在该站点上阅读了一些问题,认为他们在谈论WTF?如今,当我拿起编程书籍时,我会有相同的感觉。 我已经阅读了几本入门编程书籍,其中一些涉及C / C ++,另一些涉及游戏。我写了一些更复杂的东西,例如非常基本的AI,串行和TCP / IP接口。 我打算成为一名游戏程序员,但是最近我有机会在嵌入式系统(串行接口)上工作后对嵌入式系统产生了一定的兴趣。 我发现在完成入门和入门书籍之后,很难找到继续学习的材料,因为我找不到任何中级的C ++书籍。 您会提出什么建议来发展和增强我的知识和技能?具体资源将不胜感激。
16 c++  c 

7
是否有推荐的方法与C开发人员进行科学/工程编程的交流?
作为Web应用程序的后端过程的一部分,我有很多需要移植到C的MATLAB代码(执行速度对于这项工作至关重要)。当我尝试将此代码外包给C开发人员时,我假设(如果我错了,请纠正我)很少有C开发人员也了解MATLAB代码(诸如索引和内存管理之类的东西是不同的,等等)。我想知道是否有C开发人员可以向我推荐一个过程,以使我更好地交流代码的作用? 例如,我是否应该提供MATLAB代码并逐行解释它在做什么?或者,我应该只提供数学/算法,用简单的英语解释它,还是让C开发人员以自己的理解来实现(例如,我可以假设开发人员能够理解如何使用复杂的数学方法(例如,虚构的数字),如何生成直方图,执行FFT等)? 还是有更好的方法?我希望我不是第一个需要这样做的人,所以我想知道是否有C语言开发人员遇到了这种情况,并且可以分享任何传统的看法,他们希望如何转移这项任务? 预先感谢您的任何评论。
16 c  matlab 

3
将函数类型和方法名称放在C中不同行的原因
我刚开始在一家公司工作,在我的第一次代码审阅中,样式注释之一是返回类型和方法名称应该在不同的行上。例如这个 void foo() { } 应该是这个 void foo() { } 我一直使用第一样式,我想知道除了个人喜好之外,还有其他原因为什么人们使用第二样式吗?我认为第一个完全不会影响可读性。在C程序员和大型开源项目中,一种比另一种更普遍吗?
16 c  coding-style 


6
内存对齐有多重要?仍然重要吗?
从现在开始,我已经搜索并阅读了很多有关内存对齐方式,其工作方式和使用方法的内容。我现在找到的最相关的文章是这篇。 但是即使如此,我仍然对此有一些疑问: 在嵌入式系统之外,我们经常在计算机中拥有大量内存,这使内存管理的批评家减少了很多。我完全致力于优化,但是现在,如果我们将相同的程序与或进行比较,是否真的可以有所作为?没有它的内存重新排列和对齐? 内存对齐还有其他优势吗?我在某处读到CPU可以更好地/更快地使用对齐的内存,因为这样可以减少处理的指令(如果你们中的某个人有一篇文章/基准的链接?),在那种情况下,区别真的很重要吗?有没有比这两个更多的优势? 在第5章的文章链接中,作者说: 当心:在C ++中,看起来像结构的类可能会违反此规则!(它们是否取决于基类和虚拟成员函数的实现方式,并随编译器的不同而不同。) 本文主要讨论结构,但是局部变量声明是否也受此需求影响? 您是否知道内存对齐在C ++中如何工作,因为它似乎有些差异? 前一个问题包含“对齐”一词,但未提供上述问题的任何答案。


2
Java有JVM,C有什么?
我知道C具有编译器,但是决定执行性能的是什么? 例如,在一个if else块中,如果代码仅包含所有ifs而不是if elses,怎么确定所有ifs将被运行?在Java中将是JVM,但在C中,执行编译器是什么?
15 java  c 

5
当定义写在源代码的末尾时,为什么需要用C语言对数据和函数进行“声明”?
考虑下面的“ C”代码: #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()是在源代码的末尾定义的,并且在main()。中使用之前没有提供声明。在编译器Func_i()进入的时候main(),它出来main()并找到了Func_i()。编译器会以某种方式找到返回的值Func_i()并将其提供给printf()。我也知道,编译器无法找到返回类型的Func_i()。它在默认情况下需要(猜测?)的返回类型的Func_i()是int。就是说,如果代码具有float Func_i(),编译器将给出错误:的类型冲突Func_i()。 从上面的讨论中我们看到: 编译器可以找到由返回的值Func_i()。 如果编译器可以找到返回的值Func_i()由未来的出来main()和向下搜索源代码,那么为什么就不能找到Func_i(),它的类型明确提及。 编译器必须知道它Func_i()是float类型的-这就是为什么它会产生冲突类型的错误的原因。 如果编译器知道该Func_i类型为float类型,那么为什么仍假定它Func_i()为int类型,并给出类型冲突的错误?为什么不强制使它Func_i()成为float类型。 我对变量声明也有同样的疑问。考虑下面的“ C”代码: #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; 编译器给出错误:未声明“ Data_i”(此函数中的首次使用)。 当编译器看到 Func_i(),它会进入源代码以查找Func_()返回的值。为什么编译器不能对变量Data_i做同样的事情? …

7
在C中惯用的任意块是什么?
块是要执行的语句列表。在C中出现块的示例是在while语句和if语句之后 while( boolean expression) statement OR block if (boolean expression) statement OR block C还允许将一个块嵌套在一个块中。我可以用它重用变量名,假设我真的很喜欢'x' int x = 0; while (x < 10) { { int x = 5; printf("%d",x) } x = x+1; } 将数字5打印十次。我想我会看到需要保持变量名数量少的情况。也许在宏观扩张中。但是,我看不出有任何硬性理由需要此功能。任何人都可以通过在使用该功能的地方提供一些惯用法来帮助我理解此功能的用法。
15 c  syntax 

9
学习C对计算机科学必不可少吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是一个前端开发人员,几乎看不到带有.h或.c扩展名的文件。我知道基本的C语法,我在Unreality中学习了它,但是对这种低级编程从来没有兴趣,因为它对于简单的事情来说设置太多了。 我对学习计算机科学的各个方面都非常感兴趣,但是我想相信,为了理解计算机科学中的大多数概念,我真的不需要了解特定的语言。但是,当我开始阅读有关计算机科学基本概念(例如数据结构和算法设计)的书籍和文章时,似乎必须学习C,因为所有示例甚至课程都使用C(有时甚至是Java)编写。 我的问题是,C是计算机科学必不可少的编程语言,还是我们刚巧用CS编写了所有CS资源?不学习C就能学习计算机科学吗?

2
为什么在C11中使用丑陋的关键字?
我目前正在阅读C11规范的草案。新引入的关键字:_Bool, _Alignof, _Atomic都感觉像是自定义扩展名,而不是标准的保留关键字,如struct, union, int。 我意识到该标准基本上由标准化扩展组成...但是,这真是太糟糕了!也许我们很快就会__Long_Long_Reallylong_Integer_MSVC_2020_t以标准为最终结局! 非标准代码的向后兼容性是关键字新样式的唯一原因吗?
15 c  keywords 

8
逆向工程:它真正有什么好处?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我有一些无辜/初学者的问题: 逆向工程有什么用? 作为程序员,我应该学习逆向工程的技巧吗? 对于有经验的程序员有什么好处?

7
C库的函数是否应该总是期望字符串的长度?
我目前正在使用C语言编写的库。该库的许多功能都希望在其参数中包含char*或字符串const char*。我从那些函数开始就一直期望字符串的长度为a,size_t这样就不需要空终止。但是,在编写测试时,这导致频繁使用strlen(),例如: const char* string = "Ugh, strlen is tedious"; libFunction(string, strlen(string)); 信任用户传递正确终止的字符串将导致安全性降低,但更为简洁和(在我看来)可读的代码: libFunction("I hope there's a null-terminator there!"); 那么,这里的明智做法是什么?使API使用起来更加复杂,但会迫使用户考虑他们的输入,或者记录对以空值结尾的字符串的需求并信任调用者?
15 c  api  strings 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.