Questions tagged «c»

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

11
当我测试C中移位和乘法之间的时间差异时,没有差异。为什么?
有人告诉我,二进制移位比乘以2 ^ k要有效得多。因此,我想尝试一下,并使用以下代码对此进行了测试: #include <time.h> #include <stdio.h> int main() { clock_t launch = clock(); int test = 0x01; int runs; //simple loop that oscillates between int 1 and int 2 for (runs = 0; runs < 100000000; runs++) { // I first compiled + ran it a few times with …

10
为什么我在了解C和C ++的情况下学习C ++ 11?[关闭]
我是C和C ++的程序员,尽管我不拘泥于两种语言,而是将两者混合编写。有时在类中包含代码,可能带有操作符重载或模板,如此出色的STL显然是一种更好的方法。有时,使用简单的C函数指针的可读性和清晰度要高得多。因此,我发现两种语言都具有美感和实用性。我不想讨论“如果将它们混合并使用C ++编译器进行编译,那么就不再是混合,而是所有C ++”,我想我们都理解混合它们的意思。另外,我不想谈论C与C ++,这个问题全都与C ++ 11有关。 C ++ 11引入了我认为对C ++的工作方式的重大更改,但是它引入了许多特殊情况,异常和不规则性,这些情况改变了不同功能在不同情况下的行为,对多重继承施加了限制,用作关键字的标识符,扩展字符串文字,lambda函数变量捕获等。 我知道在将来的某个时刻,当您说C ++时,每个人都会假定C ++ 11。就像如今您说C一样,您很可能是说C99。这使我考虑学习C ++ 11。毕竟,如果我想继续用C ++编写代码,可能只是因为我的同事在某些时候需要开始使用这些功能。 以C为例。经过这么多年,仍然有很多人在学习和编写C语言代码。为什么呢?因为语言很好。好的意思是,它遵循许多规则来创建好的编程语言。因此,除了功能强大(几乎所有编程语言都很容易实现或很难实现)之外,C还是常规的,几乎没有例外。但是,C ++ 11我不这么认为。我不确定C ++ 11中引入的更改是否会使该语言变得更好。 所以问题是:为什么我要学习C ++ 11?
28 learning  c++  c  c++11 

7
C ++技能高于C技能?[关闭]
我觉得经常看到的C / C ++并不能真正描述我在简历中的技能。因此,我计划将其分为高级C ++知识和普通C技能。 您认为这会让读者感到困惑吗?她可能会想:“ C是C ++的子集,那么这个人想打电话给我什么?” 好吧,我想告诉的是:我已经完成了几个真实的C ++项目,而纯粹的C项目只是一个业余爱好。您是否同意熟练的C ++程序员不一定是合格的C专家,或者您认为此转换很容易完成?
28 c++  c  skills 

9
为什么Scala没有用C或C ++实现
有人知道为什么Scala是用Java和.NET而不是C或C ++实现的吗?大多数语言都是用Cor C ++实现的(例如Erlang,Python,PHP,Ruby,Perl)。除了允许访问Java和.NET库之外,用Java和.NET实现的Scala的优点是什么? 更新 如果用C来实现,Scala不会获得更多好处,因为它可以进行更好的调整而不是依赖JVM?
28 java  c++  .net  c  scala 

2
为什么选择百分号(%)作为printf系列功能的格式说明符?
每个人都知道,至少在C语言中,您使用printf函数族来打印格式化的字符串。这些函数使用百分号(%)表示格式说明符的开头。例如,%d表示打印一个int和,%u表示打印一个unsigned int。如果您不熟悉printf函数和格式占位符的工作方式,或者只是需要复习,则Wikipedia文章是一个不错的起点。 我的问题是,这是最初还是将来会被选作格式说明符的原因是否特别引人注目? 显然,该决定是在很久以前做出的(很可能是C语言的前身),从那时起,它或多或少成为“标准”的(不仅在C语言中,而且在许多其他语言中,已经在不同程度上采用了它的语法),所以现在改变为时已晚。但是我仍然很好奇,是否有人对为什么首先要做出这种选择有任何见解,以及如果人们正在设计一种具有类似功能的新语言,是否仍然有意义。 例如,对于C#(和其他.NET语言家族),Microsoft在字符串格式化功能的操作方面做出了稍有不同的决定。尽管可以在此处强制执行某种程度的类型安全(与printfC中的实现不同),因此没有必要包含相应参数类型的指示,但他们决定使用零索引的花括号对({})作为格式说明符,例如: string output = String.Format("In {0}, the temperature is {1} degrees Celsius.", "Texas", 37); Console.WriteLine(output); // Output: // In Texas, the temperature is 37 degrees Celsius. 该String.Format方法的文档包含更多信息,就像这篇文章有关复合格式的一般说明一样,但是确切的细节并不重要。关键是他们放弃了%用于指示格式说明符开始的长期实践。C语言本来可以轻松使用{d}和{u},但事实并非如此。任何人都对以下原因有任何想法:为什么要回想起这个决定,以及是否应该遵循新的实现方式? 显然,没有可以不必逃避的字符可以选择,以便可以将其包含在字符串本身中,但是仅使用两个就可以很好地解决该问题。还有哪些其他考虑因素?
27 c  history 



5
C ++模板只是一种美化的宏吗?
通过C ++模板和C#/ Java泛型之间的不同比较,例如: /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 我感觉到,C ++模板是通过某种预处理(在解析之前替换纯文本)而不是通过编译实现的。因为C ++模板中的类型检查类似于C宏。我的意思是,如果存在一些错误,它们是处理模板代码块后生成的代码中的错误,而不是模板本身中的错误。换句话说,它们只是C语言中宏的一种上层版本。 然后我发现了其他一些事实支持这一点- 我认为,如果C ++模板通过预处理实现,则动态链接(使用.dll)会出现问题。快速搜索支持了这一点。 另一点是,整数常量可以作为参数传递给模板。而且它甚至支持某种递归。但是在编译的汇编/机器代码中找不到此递归。通过为每个递归调用生成函数,可以在编译时管理递归对象,因此具有更大但更快的可执行二进制文件。 尽管与C宏不同,但它具有一些优越的功能。但是C ++模板不是通过某种预处理实现的吗?如何在不同的C ++编译器中实现?
27 c++  c  compiler  templates  macros 

3
为什么long int在某些计算机上占用12个字节?
在我的机器上编译以下代码后,我发现了一些奇怪的事情: #include <stdio.h> int main() { printf("Hello, World!\n"); int a,b,c,d; int e,f,g; long int h; printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x", &a,&b,&c,&d,&e,&f,&g,&h); return 0; } 结果如下。注意,每个int地址之间有4个字节的差异。但是,在最后一个int和长整数之间有12个字节的差异: Hello, World! The addresses are: da54dcac da54dca8 da54dca4 da54dca0 da54dc9c da54dc98 da54dc94 …
26 c  memory  pointers 

5
如何使两种不同的程序与两种不同的语言交互?
我不知道这是否太广泛了,但是我还是一个年轻的程序员,还在上大学,那是我的大三。我觉得我对各种语言都有很好的掌握,并且有很好的基础。但是我绊脚想想如果例如,如果我尝试创建一个程序并说我用python编写了一个部件,只是因为它很容易并且可以完成工作,但是该程序需要从我编写的另一个程序中获取输出在C中,由于速度原因,我使用C。我不确定如何使两种不同的程序和语言相互交互以创建一个整体的程序。我在想肯定要写一个文件,但是如果python和C程序都访问一个文件,那我该怎么想锁了。 多数情况下,我是通过将文件导入程序来完成此操作的,但在那种情况下,它们是相同的语言,因此我只需要使用导入功能即可,但是在两种语言/程序交互以创建一个内聚输出时,我遇到了麻烦。 我当时在考虑这个问题,因为我想潜入创建一些基本的Web应用程序只是为了学习,但我不知道如何说javascript文件与我用python编写的内容交互,反之亦然。 我觉得我在这里缺少一些真正容易的事情,只是不了解。抱歉,如果这个问题太笼统,但是我在网上找不到一个明确的答案,我正试图浏览一个开放源Web应用程序,但无法真正抓住它的答案,如果这个问题看起来很愚蠢,请再次宽恕我这是一个问我喜欢在stackexchange上阅读的好地方。 感谢您的答复。
26 python  c 

9
为什么要禁用编译器警告?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 这个答案和添加的注释显示了一种使用#pragma指令禁用多个编译器警告的方法。 为什么要这样做?通常,警告的存在是有原因的,我一直觉得它们是很好的理由。是否有应禁用警告的“有效情况”?现在我什么也想不出来,但也许就是我。
26 c#  c++  c  warnings 

3
为什么要增加指针?
我最近才开始学习C ++,并且由于大多数人(根据我一直在阅读的内容),我一直在努力使用指针。 不是传统意义上的,我了解它们的含义,为什么使用它们,以及它们如何有用,但是我无法理解递增指针的使用方式,谁能提供一个解释如何递增指针的解释。有用的概念和惯用的C ++? 在我开始阅读Bjarne Stroustrup 的《A C ++之旅》一书之后,就提出了这个问题,我被推荐这本书,因为我对Java非常熟悉,Reddit的家伙告诉我这将是一本很好的“转换”书。 。
25 c++  c  pointers 

11
为什么C中的void表示不无效?
在Java和C#等强类型语言中,void(或Void)作为方法的返回类型似乎意味着: 此方法不返回任何内容。没有。没有回报。您不会从此方法收到任何信息。 真正奇怪的是,在C语言中,void作为返回类型甚至方法参数类型的含义是: 真的可以是任何东西。您必须阅读源代码才能找到答案。祝好运。如果这是一个指针,那么您应该真的知道自己在做什么。 考虑以下C语言示例: void describe(void *thing) { Object *obj = thing; printf("%s.\n", obj->description); } void *move(void *location, Direction direction) { void *next = NULL; // logic! return next; } 显然,第二个方法返回一个指针,根据定义,该指针可以是任何东西。 由于C早于Java和C#,因此为什么这些语言采用void“ nothing”的含义,而C却使用“ nothing or any(当指针时)”呢?
25 c  pointers 



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.