Questions tagged «c»

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


10
为什么C和C ++编译器从不强制执行函数签名中的数组长度?
这是我在学习期间发现的: #include<iostream> using namespace std; int dis(char a[1]) { int length = strlen(a); char c = a[2]; return length; } int main() { char b[4] = "abc"; int c = dis(b); cout << c; return 0; } 因此,在变量中int dis(char a[1]),[1]似乎无法执行任何操作,并且根本不起作用 ,因为我可以使用a[2]。就像int a[]还是char *a。我知道数组名称是一个指针以及如何传达一个数组,所以我的难题与这部分无关。 我想知道的是为什么编译器允许这种行为(int a[1])。还是还有我不知道的其他含义?
131 c++  c  arrays 


3
当限制为959但不是960时,为什么优化了一个简单循环?
考虑以下简单循环: float f(float x[]) { float p = 1.0; for (int i = 0; i < 959; i++) p += 1; return p; } 如果使用gcc 7(快照)或clang(树干)进行编译,-march=core-avx2 -Ofast则会得到非常类似的结果。 .LCPI0_0: .long 1148190720 # float 960 f: # @f vmovss xmm0, dword ptr [rip + .LCPI0_0] # xmm0 = mem[0],zero,zero,zero ret 换句话说,它只是将答案设置为960而不会循环。 但是,如果将代码更改为: …
131 c  gcc  optimization  clang 


4
GCC的默认包含目录是什么?
当我使用gcc编译非常简单的源文件时,无需指定标准包含文件(例如stdio或stdlib)的路径。 GCC如何知道如何找到这些文件? 它/usr/include内部是否具有硬连线的路径,还是会从其他OS组件获取路径?
131 c++  c  linux  gcc  include-path 

12
为什么C没有未签名的浮点数?
我知道,这个问题似乎很奇怪。程序员有时会想太多。请继续阅读... 在CI中使用signed和unsigned整数很多。我喜欢这样的事实,即编译器会在执行诸如将带符号的整数分配给无符号的变量之类的操作时警告我。如果将带符号整数与无符号整数进行比较,则会收到警告。 我喜欢这些警告。他们帮助我保持我的代码正确。 为什么我们没有同样的花车奢侈品?平方根绝对不会返回负数。在其他地方,负浮点值也没有意义。无符号浮动的完美候选人。 顺便说一句-我不太希望通过从浮点数中删除符号位来获得额外的精度。我对floats 非常满意,因为它们现在是。我只想有时将浮点数标记为无符号,并得到与整数相同的警告。 我不知道任何支持无符号浮点数的编程语言。 知道为什么它们不存在吗? 编辑: 我知道x87 FPU没有处理未签名浮点数的指令。让我们只使用签名的float指令。误用(例如,低于零)可以视为未定义行为,就像带符号整数的溢出未定义一样。



4
布尔到整数的转换
这种转换的可移植性。我可以确定两个断言都通过了吗? int x = 4<5; assert(x==1); x = 4>5; assert(x==0); 不要问为什么。我知道这很丑。谢谢。
130 c++  c  c99 

17
将C程序中的文本文件“ #include”作为char []
有没有办法在编译时将整个文本文件作为字符串包含在C程序中? 就像是: file.txt: This is a little text file main.c: #include <stdio.h> int main(void) { #blackmagicinclude("file.txt", content) /* equiv: char[] content = "This is\na little\ntext file"; */ printf("%s", content); } 获得在stdout上打印的小程序“这是一个小文本文件” 目前,我使用了一个骇人的python脚本,但是它非常丑陋,并且仅限于一个变量名,您能告诉我另一种方法吗?

5
如何在Linux上为gcc创建简单的makefile?
我有三个文件:program.c,program.h和headers.h。 program.c包括program.h和headers.h。 我需要使用gcc编译器在Linux上进行编译。我不确定该怎么做。Netbeans为我创建了一个,但是它是空的。
130 c  gcc  makefile 

4
为什么sizeof(my_arr)[0]可以编译并等于sizeof(my_arr [0])?
为什么要编译此代码? _Static uint32_t my_arr[2]; _Static_assert(sizeof(my_arr) == 8, ""); _Static_assert(sizeof(my_arr[0]) == 4, ""); _Static_assert(sizeof(my_arr)[0] == 4, ""); 前2个断言显然是正确的,但我希望最后一行会失败,因为我的理解是sizeof()应求值为整数文字,不能将其视为数组。换句话说,它将以与以下行失败相同的方式失败: _Static_assert(4[0] == 4, ""); 有趣的是,以下确实确实无法编译(应该做同样的事情,不是吗?): _Static_assert(*sizeof(my_arr) == 4, ""); 错误:一元'*'的类型参数无效(具有'long unsigned int')_Static_assert(* sizeof(my_arr)== 4,“”); 如果有关系,我正在使用gcc 5.3.0
129 c  sizeof 

11
让GDB保存断点列表
好的,info break列出了断点,但不能采用可以使用--command重用它们的格式,如本问题所述。GDB是否有一种方法可以将它们转储到可以再次输入的文件中?有时在调试会话中,有必要在建立一组用于测试的断点之后重新启动GDB。 .gdbinit文件具有与--command相同的问题。该信息休息命令不会列出命令,而是供人食用的表。 详细说明,这是info break的示例: (gdb)信息中断 编号类型显示Enb地址什么 1个断点保持y 0x08048517 <foo :: bar(void)+7>
129 c++  c  debugging  gdb  breakpoints 

7
什么是标准化的UTF-8?
在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。 但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然?

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.