Questions tagged «c»

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

7
关于C中的数组初始化的困惑
在C语言中,如果初始化这样的数组: int a[5] = {1,2}; 那么所有未显式初始化的数组元素将被隐式初始化为零。 但是,如果我这样初始化一个数组: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); 输出: 1 0 1 0 0 我不明白,为什么要a[0]打印1而不是0?它是不确定的行为吗? 注意:这个问题是在采访中提出的。

7
将C int数组重置为零:最快的方法?
假设我们有一个T myarray[100]T = int,unsigned int,long long int或unsigned long long int,将所有内容重置为零的最快方法是什么(不仅用于初始化,而且在程序中多次重置内容) ?也许与记忆模式? 对于类似的动态数组也存在同样的问题T *myarray = new T[100]。
102 c++  c  arrays  memset 


2
GCC -g vs -g3 GDB标志:有什么区别?
使用gcc或Clang编译C源代码时,我总是使用该-g标志来生成gdb的调试信息。 gcc -g -o helloworld helloworld.c 我注意到有些人推荐了-g3。-g和-g3标志之间有什么区别?-g和之间还有区别-ggdb吗?
102 c  debugging  gcc  gdb  clang 

4
在C代码中使用C ++库
我有一个C ++库,其中提供了用于管理数据的各种类。我有该库的源代码。 我想扩展C ++ API以支持C函数调用,以便该库可以与C代码和C ++代码同时使用。 我正在使用GNU工具链(gcc,glibc等),因此语言和体系结构支持不是问题。 从技术上讲不可能有什么原因吗? 我需要注意任何陷阱吗? 是否有与此相关的资源,示例代码和/或文档? 我发现的其他一些内容: 使用以下代码包装C代码需要使用的C ++标头。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 将“真实的” C ++接口保留在C不包含的单独的头文件中。在这里考虑PIMPL原理。#ifndef __cplusplus #error在这里使用东西有助于发现任何疯狂。 小心C ++标识符作为C代码中的名称 C和C ++编译器之间的枚举大小不同。如果您使用的是GNU工具链,则可能不是问题,但仍然要小心。 对于结构,请遵循以下格式,以免C混淆。 typedef struct X { ... } X …
102 c++  c  gcc  glibc 


7
如何计算CRC32校验和?
也许我只是看不到它,但是CRC32似乎不必要地复杂,或者在我能在网上找到的任何地方都没有足够的解释。 我知道这是消息值的非基于进位算术除法的余数,再除以(生成器)多项式,但是它的实际实现使我无所适从。 我已经阅读了《 CRC错误检测算法的无痛指南》,我必须说这并非没有痛苦。它在理论上讲得相当不错,但是作者从来没有想到一个简单的“就是这样”。他确实说过标准CRC32算法的参数是什么,但是他却忽略了清楚地说明如何实现它。 让我感到高兴的部分是,当他说“这就是它”,然后接着说:“哦,顺便说一句,它可以被颠倒或以不同的初始条件开始”,而没有给出最终方法的明确答案。给定他刚刚添加的所有更改,计算CRC32校验和的过程。 关于CRC32的计算方式有更简单的解释吗? 我试图用C语言编写表的形成方式: for (i = 0; i < 256; i++) { temp = i; for (j = 0; j < 8; j++) { if (temp & 1) { temp >>= 1; temp ^= 0xEDB88320; } else {temp >>= 1;} } testcrc[i] = temp; } 但这似乎产生了与我在互联网上其他地方发现的价值观不一致的价值观。我可以使用在网上找到的值,但是我想了解它们是如何创建的。 …
102 c  checksum  crc32 

24
为什么不将C用于您的Web应用程序?
今天早上,当我遇到G-WAN时,我正在看几个不同的Web服务器。据我了解,它是一个用C编写的Web服务器,您必须通过用C编写您的网站/ webapps来使用它。一个明显的好处就是速度,就像G-WAN网站所建议的那样。 但是,在论坛上,G-WAN的创建者问为什么不将C用于基于Web的应用程序,除了困难之外,我无法想到一个原因(无论如何,对于我来说,我是C的新手)。除了使用这些语言轻松开发之外,我们还有其他更多原因需要使用PHP,Python,Ruby等。我认为这不是一个很好的理由。 所以我告诉你:为什么不为Web应用程序使用C?
101 php  c  web-applications 

16
计时器功能,使用C ++以纳秒为单位提供时间
我希望计算API返回值所花费的时间。采取这种行动所花费的时间在纳秒级左右。由于该API是C ++类/函数,因此我使用timer.h来进行计算: #include <ctime> #include <cstdio> using namespace std; int main(int argc, char** argv) { clock_t start; double diff; start = clock(); diff = ( std::clock() - start ) / (double)CLOCKS_PER_SEC; cout<<"printf: "<< diff <<'\n'; return 0; } 上面的代码以秒为单位给出了时间。如何在纳秒内获得相同的精度?
101 c++  c  timer 

4
uint32_t和size_t的printf格式说明符
我有以下 size_t i = 0; uint32_t k = 0; printf("i [ %lu ] k [ %u ]\n", i, k); 编译时收到以下警告: format ‘%lu’ expects type ‘long unsigned int’, but argument has type ‘uint32_t’ 当我使用夹板运行此程序时,我得到以下信息: Format argument 1 to printf (%u) expects unsigned int gets size_t: k 非常感谢您的任何建议,
101 c  printf 

1
[N…M]在C聚合初始化程序中是什么意思?
从sys.c第123行: void *sys_call_table[__NR_syscalls] = { [0 ... __NR_syscalls-1] = sys_ni_syscall, #include <asm/unistd.h> }; sys_call_table是指向数组的通用指针,我可以看到这一点。但是,表示法是什么: [0 ... __NR_syscalls-1] 什么是...? 编辑: 我在这里学到了另一个C技巧:#include <asm/unistd.h>将被预处理并替换为其内容并分配给[0 ... _NR_syscalls-1]。
101 c  linux  kernel 

14
在C / C#/ C ++中执行向后循环的最佳方法是什么?
我需要向后移动一个数组,所以我有如下代码: for (int i = myArray.Length - 1; i >= 0; i--) { // Do something myArray[i] = 42; } 有更好的方法吗? 更新:我希望C#可以为此提供一些内置机制,例如: foreachbackwards (int i in myArray) { // so easy } 更新2:有是更好的方法。符文获得以下奖项: for (int i = myArray.Length; i-- > 0; ) { //do something } //or for (int i …
101 c#  c++  c 

13
在C中尝试catch语句
我今天在想其他语言中存在的try / catch块。用谷歌搜索了一段时间,但没有结果。据我所知,在C语言中没有try / catch这样的东西。但是,有没有一种方法可以“模拟”它们? 当然,有一些断言和其他技巧,但没有其他类似try / catch的技巧也可以捕获引发的异常。谢谢
101 c 

7
创建C格式的字符串(不打印它们)
我有一个接受字符串的函数,即: void log_out(char *); 在调用它时,我需要像这样动态创建一个格式化的字符串: int i = 1; log_out("some text %d", i); 如何在ANSI C中做到这一点? 只是,由于sprintf()返回一个int,这意味着我必须至少编写3个命令,例如: char *s; sprintf(s, "%d\t%d", ix, iy); log_out(s); 有什么办法可以缩短?
101 c  string 


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.