Questions tagged «c»

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


7
64位Windows上long的位大小是多少?
不久前,有人告诉我long在64位计算机上不是64位,我应该始终使用int。这对我来说没有意义。我已经看到文档(例如Apple官方网站上的文档)说long在为64位CPU进行编译时确实是64位。我查看了64位Windows上的内容,发现 Windows:long并int保持32位长度,并且为64位整数定义了特殊的新数据类型。 (来自http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2) 我应该使用什么?我是否应该在Windows上定义类似(uw,sw((un)signed width))的东西,long否则是否要检查目标CPU的位大小?
137 c++  c  windows  64-bit  porting 


12
终止if…else if带有else子句的构造有什么好处?
我们的组织有一个必需的编码规则(无任何解释): if…else if构造应以else子句终止 范例1: if ( x < 0 ) { x = 0; } /* else not needed */ 范例2: if ( x < 0 ) { x = 0; } else if ( y < 0 ) { x = 3; } else /* this else clause is …
136 c  misra 

12
哪些平台具有8位字符以外的功能?
char有时,SO上的某人指出(aka'byte')不一定是8位。 看来8位char几乎是通用的。我以为对于主流平台,必须有一个8位char以确保其在市场上的生存能力。 从现在和历史上看,什么平台使用的char不是8位,为什么它们与“普通” 8位不同? 在编写代码并考虑跨平台支持时(例如,针对通用库),对于非8位平台值得考虑什么char? 过去,我遇到过一些char16位的Analog Devices DSP 。我想DSP是一种利基架构。(然后,在那时,手工编码的汇编器很容易击败了可用的C编译器可以做的事情,因此我在该平台上对C的使用并没有太多的经验。)
136 c++  c  cross-platform 

9
为什么不能对C函数进行名称修改?
我最近接受了一次采访,一个问题被问到extern "C"C ++代码中的用途是什么。我回答说它是在C ++代码中使用C函数,因为C不使用名称修饰。我被问到为什么C不使用名称修饰,老实说我无法回答。 我知道C ++编译器在编译函数时会给函数起一个特殊的名称,主要是因为我们可以在C ++中使用同名的重载函数,这些重载函数必须在编译时进行解析。在C语言中,函数的名称将保持不变,或者在其前面加上_。 我的查询是:允许C ++编译器也处理C函数怎么了?我本来以为编译器给它们起什么名字都没关系。我们在C和C ++中以相同的方式调用函数。
136 c++  c  name-mangling  extern-c 

6
如何从Swift调用C?
有没有办法从Swift调用C例程? 许多iOS / Apple库仅是C语言,我仍然希望能够调用它们。 例如,我希望能够从Swift调用objc运行时库。 特别是,如何桥接iOS C标头?
136 c  swift 

8
在GCC / G ++编译器中使用-pedantic的目的是什么?
此说明说: -ansi:告诉编译器实现ANSI语言选项。这将关闭GCC的某些“功能”,这些功能与ANSI标准不兼容。 -pedantic:与结合使用-ansi,可以告诉编译器严格遵守ANSI标准,拒绝任何不符合要求的代码。 首先要注意的是: GCC / G ++编译器的-pedantic和-ansi选项的目的是什么(我听不懂上面的描述)? 谁能告诉我使用这两个选项的正确情况? 我什么时候应该使用它们? 他们重要吗?
136 c++  c  gcc  g++ 


4
“ int main(vooid)”?这是如何运作的?
最近,我不得不输入一个小型的C测试程序,在此过程中,我偶然通过使用vooid而不是来在主要功能中犯了一个拼写错误void。 但是它仍然有效。 将其缩减为最小的完整版本,最终得到: int main (vooid) { return 42; } 但这确实编译(gcc -Wall -o myprog myprog.c),并在运行时,它会返回42。 此有效代码到底有多正确? 这是一个从我的bash外壳剪切并粘贴的成绩单,以显示我在做什么: pax$ cat qq.c int main (vooid) { return 42; } pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq pax$ echo $? 42
135 c  syntax  main 

8
在C中签名进行无符号转换-始终安全吗?
假设我有以下C代码。 unsigned int u = 1234; int i = -5678; unsigned int result = u + i; 这里正在进行什么隐式转换,并且此代码对uand的所有值安全i吗?(安全,就算这个示例中的结果将溢出到一个巨大的正数,我也可以将其强制转换为int并获得真实的结果。)
135 c  type-conversion 


30
您最喜欢的C编程技巧是什么?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话但具有历史意义。它当前不接受新的答案或互动。 例如,我最近在linux内核中遇到了这个问题: / *如果条件为真,则强制执行编译错误* / #定义BUILD_BUG_ON(条件)((无效)sizeof(字符[1-2 * !!(条件)])) 因此,在您的代码中,如果您具有某种必须为8个字节大小的倍数的结构,可能由于某些硬件限制,您可以执行以下操作: BUILD_BUG_ON((sizeof(struct mystruct)%8)!= 0); 除非struct mystruct的大小是8的倍数,否则它不会编译;如果它是8的倍数,则根本不会生成任何运行时代码。 我知道的另一个技巧是从“ Graphics Gems”一书中获得的,该书允许单个头文件在一个模块中声明和初始化变量,而在其他使用该模块的模块中,仅将其声明为externs。 #ifdef DEFINE_MYHEADER_GLOBALS #define GLOBAL #定义INIT(x,y)(x)=(y) #其他 #define GLOBAL extern #定义INIT(x,y) #万一 GLOBAL int INIT(x,0); GLOBAL int somefunc(int a,int b); 这样,定义x和somefunc的代码可以: #define DEFINE_MYHEADER_GLOBALS #include“ the_above_header_file.h” 而仅使用x和somefunc()的代码则执行以下操作: #include“ the_above_header_file.h” 因此,您将获得一个标头文件,该标头文件声明了需要它们的全局实例和函数原型的实例,以及相应的extern声明。 那么,您最喜欢的C编程技巧是什么?
134 c 

3
这段代码如何在不使用sizeof()的情况下确定数组大小?
通过一些C面试问题,我找到了一个问题,指出“如何在不使用sizeof运算符的情况下在C中查找数组的大小?”,并提供以下解决方案。它有效,但是我不明白为什么。 #include <stdio.h> int main() { int a[] = {100, 200, 300, 400, 500}; int size = 0; size = *(&a + 1) - a; printf("%d\n", size); return 0; } 如预期的那样,它返回5。 编辑:人们指出了这个答案,但是语法确实有所不同,即索引方法 size = (&arr)[1] - arr; 因此,我认为这两个问题都是有效的,并且对问题的处理方法略有不同。谢谢大家的大力帮助和详尽的解释!

9
递归函数可以内联吗?
inline int factorial(int n) { if(!n) return 1; else return n*factorial(n-1); } 当我阅读此书时,发现上面的代码如果编译器未正确处理,将导致“无限编译”。 编译器如何决定是否内联函数?

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.