Questions tagged «c»

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

9
一个人如何代表空字符?
我目前正在编写一个小程序,但在编译时始终出现此错误 错误:空字符常量 我意识到这是因为我正在尝试将有效的char替换为空白,c[i]=''但是我无法找到另一种表示它的方法。
79 c 

9
我应该如何在C中构建复杂的项目?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 我只具备初学者级C技能,并且想知道是否存在任何事实上的“标准”来在C中构建一个稍微复杂的应用程序。甚至包括基于GUI的应用程序。 我一直在Java和PHP中使用OO范例,现在我想学习C语言,恐怕会以错误的方式构造应用程序。我不知所措,要遵循哪些准则以程序语言实现模块化,去耦和干燥。 你有什么建议吗?我找不到C的任何应用程序框架,即使我不使用框架,我也总是通过浏览它们的代码找到不错的主意。

9
如何从C程序获取100%CPU使用率
这是一个非常有趣的问题,所以让我开始讨论。我在国家计算机博物馆工作,我们刚刚设法让一台Cray Y-MP EL超级计算机从1992年开始运行,我们真的很想知道它能走多快! 我们认为最好的方法是编写一个简单的C程序,该程序将计算质数并显示执行此操作需要多长时间,然后在快速的现代台式PC上运行该程序并比较结果。 我们很快想出了以下代码来计算质数: #include <stdio.h> #include <time.h> void main() { clock_t start, end; double runTime; start = clock(); int i, num = 1, primes = 0; while (num <= 1000) { i = 2; while (i <= num) { if(num % i == 0) break; i++; } if …
79 c  windows  linux  performance  cray 


16
用C或C ++编写好的getos的示例[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在这个线程中,我们看一下goto在C或C ++中良好使用的示例。灵感来自人们以为我在开玩笑而投票赞成的答案。 摘要(标签从原始更改为意图更加清晰): infinite_loop: // code goes here goto infinite_loop; 为什么比其他更好: 具体。 goto是导致无条件分支的语言构造。替代方案取决于使用支持条件分支的结构,并带有退化的始终为真的条件。 标签记录了意图,没有额外的注释。 读者不必扫描介入的代码以获取早期的breaks(尽管无原则的黑客仍然有可能continue用Early进行模拟 goto)。 规则: 假装傻瓜没有赢。可以理解,以上内容不能在实际代码中使用,因为它违反了既定的习惯用法。 假设我们都听说过“ Goto认为有害”,并且知道goto可以用来编写意大利面条式代码。 如果您不同意一个示例,则仅凭技术优势对其进行批评(“因为人们不喜欢goto”不是技术原因)。 让我们看看是否可以像大人一样谈论这件事。 编辑 这个问题似乎已经解决了。它产生了一些高质量的答案。感谢所有人,尤其是那些认真对待我的小循环榜样的人。大多数怀疑论者担心缺乏障碍的范围。正如@quinmars在评论中指出的那样,您始终可以在循环主体周围放置括号。我顺便指出for(;;),并while(true)没有给你免费任括号(并忽略他们可能会导致错误伤脑筋)。无论如何,我不会在这个琐事上浪费您的脑力-我可以忍受无害和惯用的语言for(;;),while(true)(如果我想继续工作,也可以)。 考虑到其他答复,我看到许多人认为goto您总是必须用另一种方式重写。当然,您可以goto通过引入循环,额外的标志,嵌套的ifs或其他方法来避免使用a ,但是为什么不考虑goto也许这是最好的工具呢?换句话说,人们准备忍受多少丑陋,以避免将内置语言功能用于其预期目的?我的观点是,即使添加一个标志也付出了很高的代价。我喜欢用变量来表示问题或解决方案领域中的事物。goto仅仅避免'不会削减它。 我将接受第一个答案,该答案给出了用于分支到清除块的C模式。IMO,这是goto所有已发布答案中最有力的理由,当然,如果您以仇恨者必须避免的扭曲来衡量它,那么当然。
79 c++  c  goto 

7
为什么使用三元运算符在宏中定义1和0?
我正在将SDK用于嵌入式项目。在此源代码中,我找到了一些至少是我特有的代码。SDK的许多地方都有这种格式的源代码: #define ATCI_IS_LOWER( alpha_char ) ( ( (alpha_char >= ATCI_char_a) && (alpha_char <= ATCI_char_z) ) ? 1 : 0 ) #define ATCI_IS_UPPER( alpha_char ) ( ( (alpha_char >= ATCI_CHAR_A) && (alpha_char <= ATCI_CHAR_Z) ) ? 1 : 0 ) 在这里使用三元运算符有什么区别吗? 是不是 #define FOO (1 > 0) 与...相同 #define BAR ( …

9
为什么模数除法(%)仅适用于整数?
我最近遇到了一个问题,可以使用模数除法轻松解决,但是输入是浮点数: 给定一个周期性函数(例如sin)和只能在周期范围内计算它的计算机功能(例如[-π,π]),则使一个函数可以处理任何输入。 “显而易见的”解决方案是这样的: #include <cmath> float sin(float x){ return limited_sin((x + M_PI) % (2 *M_PI) - M_PI); } 为什么不起作用?我收到此错误: error: invalid operands of types double and double to binary operator % 有趣的是,它确实适用于Python: def sin(x): return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)
79 c++  c 

2
在C中不使用main()编译并运行程序
我正在尝试编译和运行以下没有main()功能的程序C。我已经使用以下命令编译了程序。 gcc -nostartfiles nomain.c 编译器发出警告 /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340 好,没问题 然后,我运行了可执行文件(a.out),两个printf语句都成功打印,然后出现分段错误。 因此,我的问题是,为什么成功执行打印语句后出现分段错误? 我的代码: #include <stdio.h> void nomain() { printf("Hello World...\n"); printf("Successfully run without main...\n"); } 输出: Hello World... Successfully run without main... Segmentation fault (core dumped) 注意: 在这里,-nostartfilesgcc标志可防止编译器在链接时使用标准启动文件

4
是否定义了减去两个NULL指针的行为?
如果两个非空指针变量都被赋值,是否定义了两个非空指针变量(根据C99和/或C ++ 98)的区别NULL? 例如,假设我有一个看起来像这样的缓冲区结构: struct buf { char *buf; char *pwrite; char *pread; } ex; 说,ex.buf指向数组或某些已分配的内存。如果我的代码始终确保pwrite并pread指向该数组或指向该数组的一个数组,那么我很有信心ex.pwrite - ex.pread将始终对其进行定义。但是,如果pwrite和pread都为NULL。我是否可以期望将两者定义相减,(ptrdiff_t)0还是严格遵从的代码需要测试指针是否为NULL?请注意,我唯一感兴趣的情况是两个指针均为NULL(表示缓冲区未初始化的情况)。在满足上述假设的前提下,原因与完全兼容的“可用”功能有关: size_t buf_avail(const struct s_buf *b) { return b->pwrite - b->pread; }
78 c++  c  c99  c89 

7
C函数语法,参数类型在参数列表后声明
我对C还是比较陌生。我遇到了一种从未见过的函数语法形式,其中参数类型在该参数列表之后定义。有人可以向我解释它与典型的C函数语法有何不同? 例: int main (argc, argv) int argc; char *argv[]; { return(0); }
78 c  syntax  function 

8
C的容器类/库[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow的主题。 7年前关闭。 改善这个问题 有人知道任何C容器库吗?我正在寻找某种能够提供链表,数组,哈希表等标准实现的东西,与C ++ STL的实现方式大致相同。关键问题是: 客户端代码应该能够在不修改库的情况下为多种不同数据类型创建容器。 创建和使用容器的界面应直观。
78 c  containers 


5
我想开始阅读Python源代码。我应该从哪里开始[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我想开始阅读Python源代码。 我的经验, 我非常了解Python和Java。我知道其他各种水平的语言,但是C / C + /都不是很好。我在大学里学习过C,但是从来没有对它进行过专业编程。 我阅读此代码的原因。 了解python的工作原理。 更好地学习C。 1对我来说比2更重要。 我该怎么办?
78 python  c 


9
将字符串分配给字符数组
我对以下内容感到有些惊讶。 范例1: char s[100] = "abcd"; // declare and initialize - WORKS 范例2: char s[100]; // declare s = "hello"; // initalize - DOESN'T WORK ('lvalue required' error) 我想知道为什么第二种方法不起作用。应该看起来很自然(它可以与其他数据类型一起使用)?有人能解释一下这背后的逻辑吗?
78 c 

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.