Questions tagged «c»

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

4
Win32 API的演变
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 Windows 32 API是否随着时间的推移发生了很大变化?1998年查尔斯·佩佐尔德(Charles Petzold)的书“ Programming Windows,第5版”是否仍包含相关信息,或者其中大部分已过时/过时? Windows 32 API的最新新增功能(如果有)有哪些突出示例?
11 books  c  windows  api 

2
如何正确管理C / C ++项目的依赖关系?
我有一个使用3-4个不同的开源C / C ++库的项目。 我为多个平台构建了这些库,并在我的项目中检入了针对不同平台的包含文件和静态库。 但是,我遇到了两个问题。所有这些项目都与依赖项管理有关。我正在寻找最佳实践建议。 1)我怎么知道我到底使用什么? 我没有办法获得静态库的版本。结果,我需要以某种方式跟踪我正在使用哪个版本的静态库(可能是生成它的提交的SHA)? 当我需要确定何时升级这些库时,这一点尤其重要。 2)如何复制构建? 我可能很难为特定平台构建一些特定库。我花了一段时间才弄清楚。 下次需要构建相同的库可能需要半年时间(无论出于何种原因都需要升级。但是,到那时,我绝对不会记住任何东西以及构建它的环境将早已不复存在。 3)我应该分叉这些库以获取源代码的副本吗? 这是一个较小的问题。但是,这仍然是一个问题。确保构建是可复制的(这需要源代码)是一件很高兴的事。

5
函数返回字符串,风格好吗?
在我的C程序中,我经常需要一种方法来对我的ADT进行字符串表示。即使我不需要以任何方式将字符串打印到屏幕上,使用这种调试方法也很简洁。因此,经常会出现这种功能。 char * mytype_to_string( const mytype_t *t ); 我实际上意识到我在这里有(至少)三个选项来处理返回字符串的内存。 备选方案1:将返回字符串存储在函数的静态char数组中。除了每次调用都会覆盖该字符串外,我不需要太多思考。在某些情况下这可能是个问题。 备选方案2:使用函数内部的malloc在堆上分配字符串。真的很整洁,因为我那时无需考虑缓冲区的大小或覆盖的问题。但是,我确实必须记得在完成操作后将字符串free(),然后还需要分配一个临时变量,以便可以释放。然后堆分配实际上比堆栈分配要慢得多,因此如果在循环中重复进行,则将成为瓶颈。 备选方案3:将指针传递到缓冲区,然后让调用方分配该缓冲区。喜欢: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); 这给呼叫者带来了更多的努力。我还注意到,该替代方案在参数顺序方面为我提供了另一个选择。我应该首先讨论哪个论点?(实际上有六种可能性) 那么,我该选择哪个呢?为什么?C开发人员中是否存在某种不成文的标准?

1
为什么GCC从Bison切换到C ++和C的递归下降解析器?
是否有需要的语言更改或某种实际的原因,使得Bison不再合适或不理想? 我在Wikipedia上看到它们切换了,参考了GCC 3.4和GCC 4.1发行说明。 这些发行说明指出: 手写递归下降C ++解析器已替换了以前的GCC版本中的YACC派生的C ++解析器。新的解析器包含改进的基础结构,这些基础结构可用于更好地解析C ++源代码,扩展的处理以及适当语义分析和解析之间的清晰分隔(如果可能)。新的解析器修复了旧解析器中发现的许多错误。 和: 旧的基于Bison的C和Objective-C解析器已被新的更快的手写递归下降解析器取代 我想知道的是他们遇到了什么实际问题,以及为什么使用Bison不可能/不切实际解决问题
10 c++  c  parsing  compiler 

3
为什么打包结构不属于C语言?
每个C编译器都提供“打包” C结构的选项(例如__attribute__ ((__packed__))或#pragma pack())。现在,我们都知道,如果我们想以可靠的方式发送或存储数据,则需要打包。自C语言问世以来,这也一直是必需的。 所以我想知道为什么打包结构不属于C语言规范的一部分?即使几十年来已经知道使用它们的必要性,它们甚至不在C99或C11中?我缺少什么?为什么它是特定于编译器的?
10 c 

5
C程序员阅读K&R有优势吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 这个问题一直困扰着我,因为我现在正在阅读Kernighan&Ritchie的《 C编程语言(K&R)》,但我遇到了很多,我的意思是很多从未读过C语言的程序员。 因此,我的问题是:阅读K&R有优势吗?应该是必需品吗?
10 c 

5
什么时候register关键字在C中真正有用?
我对register在C中使用关键字感到困惑。通常会告诉人们,不需要像在stackoverflow这个问题中那样使用它。 由于现代编译器,此关键字在C中是完全多余的吗?还是在某些情况下它仍然有用?如果是,在哪些情况下使用register关键字实际上会有所帮助?
10 c  keywords 

7
我相信我应该混合使用C和C ++代码。这是一个问题,如何纠正?
背景/场景 我开始纯粹用C语言编写CLI应用程序(我的第一个适当的C或C ++程序不是“ Hello World”或其变体)。大约在中途,我正在处理用户输入(字符串数组)的“字符串”,然后发现了C ++字符串流对象。我看到我可以使用这些代码保存代码,因此我在应用程序中使用了它们。这意味着我已将文件扩展名更改为.cpp,现在使用g++而不是编译应用程序gcc。因此,基于此,我可以说该应用程序从技术上讲是一个C ++应用程序(尽管90%以上的代码是用我称为C的代码编写的,因为鉴于我有限的经验,这两种语言之间存在很多交叉之处他们俩)。它是一个大约900行长的.cpp文件。 重要因素 我希望该程序免费(如金钱形式),可以自由分发并可供所有人使用。我担心的是,有人会看一下代码,然后想出以下效果: 哦,看一下编码,太糟糕了,这个程序帮不了我 可能的话!另一个问题是代码高效(这是用于测试以太网连接性的程序)。代码中不应存在效率低下的部分,以至于它们可能严重阻碍应用程序或其输出的性能。但是,当寻求有关特定功能,方法,对象调用等的帮助时,我认为这是Stack Overflow的问题。 我的问题 (在我看来)混合了C和C ++,也许我不应该这样做。我应该用C ++重写所有内容(通过这种方式,我的意思是实现更多的C ++对象和方法,也许我已经用C风格编写了可以使用较新的C ++技术浓缩的内容),或者删除了使用字符串流对象和把这一切“带回” C代码?这里有正确的方法吗?我迷路了,需要一些指导如何使该应用程序在群众眼中保持“良好”,因此他们将使用它并从中受益。 代码-更新 这是代码的链接。大约有40%的评论,我几乎每行评论,直到我感到更加流利。在我链接到的副本中,我删除了几乎所有注释。我希望这不会使阅读变得困难。我希望没有人需要完全理解它。但是,如果我犯了致命的设计缺陷,我希望它们应该易于识别。我还应该提到,我正在编写几个Ubuntu台式机和笔记本电脑。我无意将代码移植到其他操作系统。
10 c++  c 

5
有没有办法将gcc用作库?
任何人都知道这样的解决方案: #include <stdio.h> #include <gcc.h> /* This .h is what I'm looking for. */ int main (void) { /* variables declaration (...) */ /* The following line is supposed to be equivalent to: * $ gcc main.c -o main */ results = gcc_compile_and_link("main.c", "main"); /* Now I want to use …
10 c++  c  gcc 

1
用于fread / fwrite的最佳缓冲区大小
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 7年前关闭。 通过POSIX fread / fwrite函数应该为读取/写入文件选择什么缓冲区大小?
10 c 

5
使用预处理器指令或if(constant)语句是否更好?
假设我们有一个代码库,可用于许多不同的客户,并且其中包含一些仅与类型X的客户相关的代码。最好使用预处理器指令将代码仅包含在类型X的客户中,或者使用if语句?要更清楚: // some code #if TYPE_X_COSTUMER = 1 // do some things #endif // rest of the code 要么 if(TYPE_X_COSTUMER) { // do some things } 我可以考虑的参数是: 预处理程序指令可减少代码占用量并减少分支(在非优化编译器上) 如果语句的结果是始终编译的代码,例如,如果某人犯了一个错误,而该错误将损害与其从事的项目无关的代码,则该错误仍然会出现,并且他不会破坏代码库。否则,他将不会意识到腐败。 经常有人告诉我,比起预处理器,我更喜欢使用处理器(如果这完全是一个论点……) 什么是最好的-在谈论针对许多不同客户的代码库时?
10 c++  c 

6
学习C的实用方法?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我想学习C语言,通常当我想学习一种新语言时,我会想到一个简单/可以达到的项目目标,该目标具有一定的实际用途(使用api,自动执行任务等)。 我很难为C设计一个,主要是因为我阅读的所有内容都表明,C目前主要用于嵌入式系统和更复杂的软件项目(如操作系统)。 这是否表明我不需要学习它,或者我只需要在学习策略上更加困惑? 指实用学习资源?(教程/如何产生具有某些目的/益处的最终结果)
10 learning  c 

5
C语言中的API设计陷阱
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 有哪些缺陷使您无法使用C API(包括标准库,第三方库和项目内的标头)?目的是确定C语言中的API设计陷阱,以便编写新C库的人们可以从过去的错误中学习。 解释为什么缺陷不好(最好举个例子),并尝试提出改进建议。尽管您的解决方案在现实生活中可能不切实际(修复为时已晚strncpy),但它应该提请未来的图书馆作家。 尽管此问题的重点是C API,但是仍然存在影响您以其他语言使用它们的能力的问题。 请为每个答案给出一个缺陷,以便民主可以对答案进行排序。
10 c  api-design  pitfalls 

5
学习编程时面向未来的自我[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 3年前关闭。 如果您愿意,我想以“面向未来”的方式学习编程。尽管Windows主导了台式机操作系统市场(目前而言),但显然在学习其语言/框架/ API方面还是有很多价值的,依此类推-随着新设备的出现或Windows自身的发展,这种情况可能会发生变化。友好的Windows 8预览看起来不太吸引人...)。 我是否正确地认为,对于后端逻辑/低级编程等具有扎实的C / C ++知识,再结合用于Java的Java等极易移植的语言,将是软件开发的良好基础在大多数系统上将证明有用吗?-我说的是台式PC,平板电脑,电话。
10 java  c++  c  portability 

7
C语言可移植性
如何准确确定像C这样的语言的可移植性?我了解到编译器是特定于ISA的。如果是这样,那么C如何移植?还是仅仅是用C编写的源代码是可移植的,而不是可执行文件?特定于x86示例应用程序的可执行ISA是否与Apple的应用程序分开(假设Apple使用Motorola / PowerPC微处理器)?
10 c  languages 

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.