Questions tagged «c»

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


7
将函数指针转换为其他类型
假设我有一个函数,该函数接受void (*)(void*)用作回调的函数指针: void do_stuff(void (*callback_fp)(void*), void* callback_arg); 现在,如果我有这样的功能: void my_callback_function(struct my_struct* arg); 我可以安全地这样做吗? do_stuff((void (*)(void*)) &my_callback_function, NULL); 我已经看过这个问题,也看过一些C标准,这些标准说您可以转换为“兼容的函数指针”,但是我找不到“兼容的函数指针”含义的定义。

4
堆栈变量是否由GCC __attribute __((aligned(x)))对齐?
我有以下代码: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } 我有以下输出: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac 为什么地址a[0]不是的倍数0x1000? 到底__attribute__((aligned(x)))是什么?我误解了这个解释吗? 我正在使用gcc 4.1.2。


14
堆栈会向上还是向下生长?
我在c中有这段代码: int q = 10; int s = 5; int a[3]; printf("Address of a: %d\n", (int)a); printf("Address of a[1]: %d\n", (int)&a[1]); printf("Address of a[2]: %d\n", (int)&a[2]); printf("Address of q: %d\n", (int)&q); printf("Address of s: %d\n", (int)&s); 输出为: Address of a: 2293584 Address of a[1]: 2293588 Address of a[2]: 2293592 Address …
88 c  memory  stack 

7
与AT&T相比,英特尔汇编语法的局限性[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 对我来说,英特尔语法更容易阅读。如果我只关注Intel语法来遍历汇编林,我会错过任何事情吗?我有什么理由要切换到AT&T(除了能够读取其他人的AT&T程序集之外)?我的第一个线索是gdb默认使用AT&T。 如果这很重要,那么我的重点仅在于与Linux / BSD和C语言有关的任何关系汇编和语法。
88 c  linux  assembly  bsd 

4
如何在C程序的目录中列出文件?
我正在尝试在Linux上编写ftp服务器。在这种情况下,如何通过C程序在终端的目录中列出文件?也许我可以使用exec函数来运行find命令,但是我想将文件名作为字符串发送给客户端程序。我怎样才能做到这一点? 感谢您的回答。
88 c  linux 

17
C是强类型的吗?
引用维基百科: 支持两种隐式转换的两种常用语言是C和C ++,有时会声称它们是弱类型语言。但是,其他人则认为,这些语言对如何混合不同类型的操作数施加了足够的限制,因此应将两者视为强类型语言。 还有更明确​​的答案吗?

7
在switch语句中使用Continue
我想从switch语句的中间跳到以下代码中的循环语句: while (something = get_something()) { switch (something) { case A: case B: break; default: // get another something and try again continue; } // do something for a handled something do_something(); } 这是有效的使用方式continue吗?是continue通过忽略声明switch语句?C和C ++的行为是否有所不同?

5
“ Objective-C比C ++更严格地是C的超集”的确切含义是什么?
根据我在那阅读的内容:为什么Objective-C在Apple社区之外不那么受欢迎? Objective-C是C的超集(实际上比C ++严格得多),因此不会出现向后兼容的问题。您可以用C语言做的任何事情都可以用Objective-C语言做。 成为超集是二元的,就像怀孕一样。Obj-C是C的超集,而C ++不是。 超集是什么意思?Objective-C将以哪种方式更接近//向后兼容C?与C ++相比,objective-C在哪种方面更遵循C哲学? 是否可以不经目标C编译器(100%兼容性)修改而编译任何C程序? 与其说是哪个更好,不如说是关于编程语言设计和兼容性的问题。
87 c++  objective-c  c 

10
为什么printf(“%f”,0); 给未定义的行为?
该声明 printf("%f\n",0.0f); 打印0。 但是,声明 printf("%f\n",0); 打印随机值。 我意识到我表现出某种不确定的行为,但我不知道具体为什么。 所有位均为0的浮点值仍然是有效的float,值为0。 float并且int在我的计算机上具有相同的大小(如果相关)。 为什么使用整数文字而不是浮点文字printf会导致此行为? PS如果我使用可以看到相同的行为 int i = 0; printf("%f\n", i);

19
在C中将枚举类型的变量用作字符串的简单方法?
这是我想要做的: typedef enum { ONE, TWO, THREE } Numbers; 我正在尝试编写一个函数,该函数将执行类似于以下的切换情况: char num_str[10]; int process_numbers_str(Numbers num) { switch(num) { case ONE: case TWO: case THREE: { strcpy(num_str, num); //some way to get the symbolic constant name in here? } break; default: return 0; //no match return 1; } 除了在每种情况下进行定义之外,还有没有办法像我在上面尝试的那样使用enum变量进行设置?


13
##预处理程序运算符和陷阱需要考虑哪些应用?
正如我之前的许多问题中提到的那样,我正在研究K&R,目前正在使用预处理器。##预处理程序运算符是更有趣的事情之一,这是我以前学习C的任何尝试中从未知道的事情。根据K&R: 预处理程序运算符## 提供了一种在宏扩展过程中连接实际参数的方法。如果替换文本中##的参数与a相邻,则该参数将被实际参数替换, ##并删除空格和周围的空白,然后重新扫描结果。例如,宏paste 将其两个参数串联在一起: #define paste(front, back) front ## back 因此paste(name, 1)创建令牌 name1。 有人将如何以及为什么在现实世界中使用它?使用它的实际例子是什么,是否有需要考虑的地方?

12
TCHAR是否仍然相关?
我是Windows编程的新手,在阅读Petzold的书后,我感到奇怪: 使用TCHAR类型和_T()函数声明字符串是否仍然是一种好习惯,或者是否应该在新代码中仅使用wchar_tandL""字符串? 我将仅针对Windows 2000及更高版本,并且从一开始我的代码就是i18n。
87 c++  c  windows  unicode  wchar-t 

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.