Questions tagged «c»

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

8
我怎样才能告诉gcc不要内联函数?
说我在源文件中有这个小功能 static void foo() {} 并且我构建了二进制文件的优化版本,但我不想内联此函数(出于优化目的)。我可以在源代码中添加宏以防止内联吗?
126 c  gcc  inline 

7
C动态增长数组
我有一个程序可以读取游戏中实体的“原始”列表,并且我打算制作一个数组,其中包含不确定数量的实体的索引号(int),用于处理各种事物。我想避免使用过多的内存或CPU来保持此类索引... 到目前为止,我使用的一种快速而又肮脏的解决方案是在主处理函数(局部焦点)中声明具有最大游戏实体大小的数组,以及另一个用于跟踪已添加到列表中的整数的整数。这并不令人满意,因为每个列表都包含3000多个数组,虽然数量不算多,但是却感觉很浪费,因为我可能会使用6-7个列表的解决方案来实现各种功能。 我还没有找到任何C(不是C ++或C#)特定的解决方案来实现这一目标。我可以使用指针,但是我有点害怕使用它们(除非这是唯一可能的方法)。 数组不会离开局部函数范围(它们将被传递给函数,然后被丢弃),以防万一。 如果指针是唯一的解决方案,那么我该如何跟踪它们以避免泄漏?
126 c  dynamic-arrays 

12
在C ++程序中使用scanf()比使用cin更快?
我不知道这是不是真的,但是当我在一个提供问题的网站上阅读常见问题解答时,我发现了一些东西,引起了我的注意: 检查您的输入/输出方法。在C ++中,使用cin和cout太慢。使用这些,您将保证无法用大量输入或输出解决任何问题。请改用printf和scanf。 有人可以澄清一下吗?在C ++程序中使用scanf()真的比使用cin >>更快吗?如果是,那么在C ++程序中使用它是否是一个好习惯?我以为这是C特定的,尽管我只是在学习C ++。
126 c++  c  performance  io 

8
我可以用什么代替scanf进行输入转换?
我经常看到人们不鼓励其他人使用scanf并说有更好的选择。但是,我最终看到的只是“不要使用scanf”或“这里是正确的格式字符串”,而且从来没有提到任何“更好的选择”的示例。 例如,让我们看一下这段代码: scanf("%c", &c); 这将读取最后一次转换后留在输入流中的空白。通常建议的解决方案是使用: scanf(" %c", &c); 还是不使用scanf。 由于scanf不好,用于转换scanf通常无需使用即可处理的输入格式(例如整数,浮点数和字符串)的ANSI C选项有哪些scanf?
125 c  scanf 

7
为什么auto a = 1;用C编译?
代码: int main(void) { auto a=1; return 0; } 文件扩展名为.c时,MS Visual Studio 2012编译器将编译该文件而不会出现错误。我一直认为,当您使用.c扩展名时,应根据C语法而不是C ++进行编译。而且,据我所知,自C ++ 11起,只有在C ++中才允许不带类型的auto ,这意味着从初始化程序推导出类型。 这是否意味着我的编译器不坚持使用C,或者代码在C语言中实际上是正确的吗?
125 c  auto  c11 

29
如何在(非托管)代码中检测/避免内存泄漏?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 在非托管C / C ++代码中,检测内存泄漏的最佳实践是什么?和编码指南要避免?(好像就是这么简单;) 过去,我们使用了一些愚蠢的方法:每个内存分配调用都有一个计数器递增,释放时递减。在程序结束时,计数器值应为零。 我知道这不是一个好方法,而且有一些问题。(例如,如果您要释放由平台API调用分配的内存,则您的分配计数将与您的释放计数不完全匹配。当然,然后,在调用分配了内存的API调用时,我们会增加计数器。) 我期待您的经验,建议,以及一些简化此工具的参考。
125 c++  c  memory-leaks 

2
为什么Clang优化x * 1.0而不优化x + 0.0?
为什么Clang会优化这段代码中的循环 #include <time.h> #include <stdio.h> static size_t const N = 1 << 27; static double arr[N] = { /* initialize to zero */ }; int main() { clock_t const start = clock(); for (int i = 0; i < N; ++i) { arr[i] *= 1.0; } printf("%u ms\n", (unsigned)(clock() - …



7
C中的stdlib和彩色输出
我正在制作一个需要彩色输出的简单应用程序。如何使输出的颜色像emacs和bash一样? 我不在乎Windows,因为我的应用程序仅适用于UNIX系统。
125 c  colors  std  stdio 

4
C语言中_start()的用途是什么?
我从同事那里得知,无需编写main()函数就可以编写和执行C程序。可以这样完成: my_main.c /* Compile this with gcc -nostartfiles */ #include <stdlib.h> void _start() { int ret = my_main(); exit(ret); } int my_main() { puts("This is a program without a main() function!"); return 0; } 使用以下命令进行编译: gcc -o my_main my_main.c –nostartfiles 使用以下命令运行它: ./my_main 什么时候需要做这种事情?在现实世界中是否有任何有用的场景?
125 c 

15
快速查找C数组中是否存在值?
我有一个具有时间关键ISR的嵌入式应用程序,该应用程序需要循环访问大小为256(最好是1024,但最小为256)的数组,并检查值是否与数组内容匹配。在bool这种情况下,将A 设置为true。 该微控制器是NXP LPC4357,ARM Cortex M4内核,而编译器是GCC。我已经组合了优化级别2(速度慢3),并将函数放在RAM中而不是闪存中。我还使用了指针算术和一个for循环,该循环进行递减计数而不是递增计数(检查if i!=0的速度比检查if的速度快i<256)。总而言之,我最终需要花费12.5 µs的持续时间,因此必须将其大幅缩短以确保可行。这是我现在使用的(伪)代码: uint32_t i; uint32_t *array_ptr = &theArray[0]; uint32_t compareVal = 0x1234ABCD; bool validFlag = false; for (i=256; i!=0; i--) { if (compareVal == *array_ptr++) { validFlag = true; break; } } 绝对最快的方法是什么?允许使用内联汇编。也可以使用其他“不太优雅”的技巧。


4
unsigned short int的格式说明符是什么?
我有以下程序 #include <stdio.h> int main(void) { unsigned short int length = 10; printf("Enter length : "); scanf("%u", &length); printf("value is %u \n", length); return 0; } 使用哪个进行编译时gcc filename.c发出以下警告(scanf()在行中)。 warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat] 然后我提到的C99 specification …
124 c  scanf 

8
我应该从main()返回EXIT_SUCCESS还是0?
这是一个简单的问题,但是我不断看到矛盾的答案:C ++程序的主例程应该返回0还是EXIT_SUCCESS? #include <cstdlib> int main(){return EXIT_SUCCESS;} 要么 int main(){return 0;} 他们是一回事吗?如果EXIT_SUCCESS只使用exit()? 我认为EXIT_SUCCESS这是一个更好的选择,因为其他软件可能希望将零视为失败,但是我还听说,如果返回0,则编译器仍然能够将其更改为其他值。
124 c++  c  return-value  main 

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.