Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

4
我应该如何开始编写设备驱动程序?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我想学习如何编写设备驱动程序,因为我认为这很有趣。我使用的是Mac OS X Macbook,但也有一台Ubuntu计算机(在Mac Min上运行)。我对C非常熟悉,目前正在阅读本书。我在网上找到了一些链接,例如Mac Dev Center。我这样做是因为这很有趣。我认为看到由于我编写的软件而使硬件得以运行,我会感到非常满足。 我想我想要的是一些提示,建议和指导,并且有人知道没有驱动程序的设备列表吗,或者我可以为已经支持的设备编写驱动程序吗?(希望使用前者,所以我实际上是提供价值)。什么是入门的好设备?我咬的东西比我咀嚼的还多吗?我不担心底层编程或汇编,也无需付出任何努力。我真的很想挑战!
75 c  assembly  hardware  drivers 


19
是否需要“做{…} while()”循环?
Bjarne Stroustrup(C ++创建者)曾经说过,他避免执行“ do / while”循环,而是更喜欢使用“ while”循环来编写代码。[请参阅下面的引用。] 自从听到这句话以来,我发现这是真的。你怎么认为?有没有一个示例,其中“ do / while”比使用“ while”更清晰,更容易理解? 针对某些答案:是的,我了解“ do / while”和“ while”之间的技术区别。这是一个涉及循环的可读性和结构化代码的更深层问题。 让我问另一种方式:假设您被禁止使用“ do / while”-是否有一个现实的示例,除了使用“ while”编写不干净的代码,别无选择? 来自“ C ++编程语言”,6.3.3: 以我的经验,做陈述是错误和混乱的根源。原因是在评估条件之前,它的主体总是执行一次。但是,为了使身体正常工作,即使是第一次也必须保持这种状态。比起我想像的更多,我发现该条件在首次编写和测试程序时,或者在修改其之前的代码之后,均未达到预期。 我也更喜欢“可以看到它的前面”条件。因此,我倾向于避免执行陈述。-比耶恩
75 c++  c  loops 

5
如何完全禁用对assert()的调用?
我的代码充满了对的调用assert(condition)。在调试版本中,我使用g++ -g它触发我的断言。出乎意料的是,在我的发行版本中也触发了相同的断言,即没有-g选项的情况下编译的断言。 如何在编译时完全禁用我的断言?我应该NDEBUG在生产的任何版本中明确定义,而不管它们是调试,发布还是其他任何形式?
75 c++  c  assert 

3
asm,asm易失性和破坏性内存之间的区别
在实现无锁数据结构和时序代码时,通常有必要抑制编译器的优化。通常情况下,人们会在“障碍物”列表中使用asm volatilewith进行此操作memory,但有时您会看到只是asm volatile或仅有一个简单的asm障碍物记忆。 这些不同的语句对代码生成有什么影响(尤其是在GCC中,因为它不太可能移植)? 仅供参考,以下是一些有趣的变化: asm (""); // presumably this has no effect on code generation asm volatile (""); asm ("" ::: "memory"); asm volatile ("" ::: "memory");
75 c  gcc  inline-assembly 

6
可以在单个处理器系统上实现多线程吗?
我一直遵循这样的概念,即多线程只能在多处理器系统上实现,在该系统上,每个线程分配一个以上的处理器,并且每个线程可以同时执行。在这种情况下,没有调度,因为每个线程都有各自专用的资源。但是我经常在一个可以在单处理器系统上执行多线程的地方阅读它。这是对的吗?如果是,那么单处理器和多处理器系统之间有什么区别?

3
视觉上For循环中fork()会发生什么
我一直在试图了解fork()行为。这次在for-loop。观察以下代码: #include <stdio.h> void main() { int i; for (i=0;i<3;i++) { fork(); // This printf statement is for debugging purposes // getppid(): gets the parent process-id // getpid(): get child process-id printf("[%d] [%d] i=%d\n", getppid(), getpid(), i); } printf("[%d] [%d] hi\n", getppid(), getpid()); } 这是输出: [6909][6936] i=0 [6909][6936] i=1 [6936][6938] …
75 c  fork 

15
在C中使用对与错
据我所知,有3种在c语言中使用布尔值的方法 从布尔类型开始,然后使用true和false 使用预处理器进行定义 #define FALSE 0 ... #define TRUE !(FALSE) 只是直接使用常量,即1和0 还有其他我错过的方法吗?不同方法的优缺点是什么? 我想最快的将是数字3,2仍然更容易阅读(尽管按位取反会稍微增加开销),1可读性最高而不与所有编译器兼容。
75 c  coding-style 

5
int64_t的定义
我是C / C ++的新手,所以我对基本类型有几个问题: a)您可以向我解释int64_t和long(long int)之间的区别吗?据我了解,两者都是64位整数。有什么理由选择一个? b)我试图int64_t在网上查找的定义,但没有取得太大的成功。我需要咨询有关此类问题的权威信息吗? c)对于int64_t用于编译的代码,我目前包含<iostream>,这对我来说没有太大意义。还有其他包含提供声明的内容int64_t吗?
75 c++  c  integer  long-integer 



4
在哪里可以找到off_t类型的完整定义?
我正在使用TCP从客户端向服务器发送文件。为了标记文件的结尾,我想在实际数据之前发送文件大小。因此,我使用stat系统调用来查找文件的大小。这是类型off_t。我想知道它占用了多少字节,以便可以在服务器端正确读取它。它在中定义 <sys/types.h>。但是我不明白这个定义。它只是定义__off_t or _off64_t为off_t。在哪里找__off_t?__头文件中大多数内容的前缀也是约定,当我阅读头文件以更好地理解它时,这使我感到恐惧。如何更好地读取头文件? #ifndef __off_t_defined # ifndef __USE_FILE_OFFSET64 typedef __off_t off_t; # else typedef __off64_t off_t; # endif # define __off_t_defined #endif


13
如何在Objective-C中打破两个嵌套的for循环?
我有两个这样嵌套的for循环: for(...) { for(...) { } } 我知道有一个break声明。但是我很困惑它是否打破了两个循环,或者只是打破了它被调用的那个循环?一旦发现重复进行多次没有意义,就需要将两者都打破。
74 c  objective-c  loops 

12
指针与普通指针的对比
指针的目的是保存特定变量的地址。然后,以下代码的内存结构应类似于: int a = 5; int *b = &a; ......内存地址......值 a ... 0x000002 ................... 5 b ... 0x000010 ..... .............. 0x000002 好的。然后假设现在我要保存指针* b的地址。然后我们通常将双指针** c定义为 int a = 5; int *b = &a; int **c = &b; 然后,内存结构如下所示: ......内存地址......值 a ... 0x000002 ................... 5 b ... 0x000010 ..... .............. 0x000002 c …
74 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.