c 相关问题

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

在 C (Windows) 上解析命名命令行参数

我目前正在使用 Visual Studio 和 C 在 Windows 上开发一个工具,但是我注意到我无法将 unistd.h 等库导入到我的源文件中以进行命令行参数解析。 当前...

回答 1 投票 0

Libxml2:输出带有属性和内容的XML元素

我正在使用 libxml2 XMLTextWriter API(此处提供了官方示例)来输出 XML,但找不到任何示例或了解如何生成具有属性和内容的元素,...

回答 1 投票 0

使用宏初始化嵌套结构时出现问题

我正在尝试使用宏初始化嵌套结构指针。我的结构如下所示。我正在使用如下宏。 类型定义结构{ uint8_t Loc; uint8_t 模块;

c
回答 1 投票 0

如何读取MCU STM32G4内部温度

我想观察MCU运行时的温度。我使用手册中的公式。但经过一番测试,温度结果误差较大 在此输入图像描述 所以...

回答 1 投票 0

protobuf-c 中重复的子消息

有人能给我一个在 protobuf-c 中使用重复子消息打包\解包消息的示例吗? 关于此事的官方文档是空的。

回答 4 投票 0

C strtok() 将字符串拆分为标记,但保持旧数据不变

我有以下代码: #包括 #包括 int 主(无效){ char str[] = "约翰|多伊|墨尔本|6270|AU"; char fname[32]、lname[32]、城市[32]、zip[32]、c...

回答 4 投票 0

如何在c中调用c++结构体函数?

$树 。 |-- 外部.c |-- sc.h `--serial_comm.cpp $ 猫外部.c #include“sc.h” int main() { 结构 MyStruct* sc; sc->myFunction1(); } $ 猫 SC.H #ifndef SC_H #d...

回答 1 投票 0

解析 ESP 8266 的 RGB HexCode 字符串

我正在开发一个项目,其中我的 ESP8266 从互联网接收颜色十六进制代码,然后我将该颜色用于 LED 灯带。 我收到的示例文本是“$3#FF00FF” 然而我的代码

回答 1 投票 0

inotify 未注册所有事件

我正在尝试使用 inotify 递归地监视目录,这意味着,每当在此目录或子目录之一中创建目录或文件时,我都希望收到通知。主要的可怕...

回答 2 投票 0

openmp 的并行化变得更糟

我正在尝试将模糊无监督 c 均值算法与 openmp 并行化,我已经做到了,问题是当我使用 16/32 线程时,它应该比 8/4 线程提供更好的结果,但是

回答 1 投票 0

int_leastX_t 与 intX_t 有区别吗?

int8_t、int16_t、int32_t 和 int64_t 是有符号整数类型,宽度分别为 8、16、32 和 64 位 没有填充位并使用 2 的补码表示负值 (提供于...

c
回答 1 投票 0

-O 和 -wrap 的行为

我正在尝试使用 -wrap=symbol 来模拟函数进行单元测试,并且根据传递的 GCC 优化标志发现不同的行为 考虑下面的示例程序 #包括 我正在尝试使用 -wrap=symbol 来模拟函数进行单元测试,并且根据传递的 GCC 优化标志发现不同的行为 考虑下面的示例程序 #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> void * __wrap_malloc(size_t sz) { printf("Called %s", __func__); return (void *) 0xDEADBEEF; } int main() { void *ptr; ptr = malloc(10); assert(0xDEADBEEF == (unsigned int)(uintptr_t)(ptr)); return 0; } 使用优化时 ❯ gcc -Os -Wl,-wrap=malloc 1.c -o opt ❯ ./opt opt: 1.c:16: main: Assertion `0xDEADBEEF == (unsigned int)(uintptr_t)(ptr)' failed. [1] 12546 abort ./opt 未经优化 ❯ gcc -Wl,-wrap=malloc 1.c -o without_opt ❯ ./without_opt Called __wrap_malloc 我尝试反汇编可执行文件 优化 0000000000400450 <main>: 400450: 48 83 ec 08 sub $0x8,%rsp 400454: b9 20 06 40 00 mov $0x400620,%ecx 400459: ba 10 00 00 00 mov $0x10,%edx 40045e: be ea 05 40 00 mov $0x4005ea,%esi 400463: bf ee 05 40 00 mov $0x4005ee,%edi 400468: e8 d3 ff ff ff callq 400440 <__assert_fail@plt> 40046d: 0f 1f 00 nopl (%rax) 未经优化 000000000040053e <main>: 40053e: 55 push %rbp 40053f: 48 89 e5 mov %rsp,%rbp 400542: 48 83 ec 10 sub $0x10,%rsp 400546: bf 0a 00 00 00 mov $0xa,%edi 40054b: e8 c7 ff ff ff callq 400517 <__wrap_malloc> 400550: 48 89 45 f8 mov %rax,-0x8(%rbp) 400554: 48 8b 45 f8 mov -0x8(%rbp),%rax 400558: 3d ef be ad de cmp $0xdeadbeef,%eax 40055d: 74 19 je 400578 <main+0x3a> 40055f: b9 4e 06 40 00 mov $0x40064e,%ecx 400564: ba 10 00 00 00 mov $0x10,%edx 400569: be 0a 06 40 00 mov $0x40060a,%esi 40056e: bf 10 06 40 00 mov $0x400610,%edi 400573: e8 c8 fe ff ff callq 400440 <__assert_fail@plt> 400578: b8 00 00 00 00 mov $0x0,%eax 40057d: c9 leaveq 40057e: c3 retq 40057f: 90 nop 没有调用wrap_malloc。看起来已经优化了。然后我尝试添加打印语句 int main() { void *ptr; ptr = malloc(10); >> printf("0x%x\n", (uintptr_t)ptr); assert(0xDEADBEEF == (unsigned int)(uintptr_t)(ptr)); return 0; } ❯ gcc -Os -Wl,-wrap=malloc 1.c -o print_opt ❯ ./print_opt Called __wrap_malloc0xdeadbeef print_opt: 1.c:17: main: Assertion `0xDEADBEEF == (unsigned int)(uintptr_t)(ptr)' failed. [1] 31575 abort ./print_opt 现在我看到包装的函数被调用。但断言失败了 0000000000400450 <main>: 400450: 48 83 ec 08 sub $0x8,%rsp 400454: bf 0a 00 00 00 mov $0xa,%edi 400459: e8 f9 00 00 00 callq 400557 <__wrap_malloc> 40045e: bf 0a 06 40 00 mov $0x40060a,%edi 400463: 48 89 c6 mov %rax,%rsi 400466: 31 c0 xor %eax,%eax 400468: e8 c3 ff ff ff callq 400430 <printf@plt> 40046d: b9 48 06 40 00 mov $0x400648,%ecx 400472: ba 11 00 00 00 mov $0x11,%edx 400477: be 10 06 40 00 mov $0x400610,%esi 40047c: bf 14 06 40 00 mov $0x400614,%edi 400481: e8 ba ff ff ff callq 400440 <__assert_fail@plt> 400486: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 40048d: 00 00 00 有人可以帮助我理解为什么/如何看到这种行为吗?预先感谢 对于 gcc,malloc() 被视为所谓的 “内置”函数,优化器会意识到并专门处理它(例如,它可以对其返回值做出某些假设,这会导致它自动失败)断言而不需要对其进行运行时测试)。如果您将 -fno-builtin-malloc 添加到编译选项中,则该特殊处理将被禁用: $ gcc -Os -fno-builtin-malloc -Wl,-wrap=malloc 1.c -o opt $ ./opt Called __wrap_malloc

回答 1 投票 0

AF_PACKET 套接字在 Linux 中如何工作?

我正在尝试为 Linux 编写一个 C 嗅探器,并了解嗅探时内核中发生的操作。 我无法找到以下问题的答案: 如果我初始化我的...

回答 1 投票 0

仅当将值与 TRUE 进行比较时,操作警告中 xxx 和 bool 的不安全混合

我有一个用 C 实现的库(C89 兼容)。它定义了布尔数据类型 bool32。它还定义了布尔文字 TRUE 和 FALSE: #ifndef 真 # 定义 TRUE (0 == 0) #万一 #

回答 1 投票 0

如何处理SSL_accept上的SSL_ERROR_SSL

我使用 openssl(开发库,)用 C 语言编写一个小型、简单的服务器。由于我只在本地测试它,所以我使用自签名证书。第一次连接时,...

回答 1 投票 0

-某些编译器中的 Wint-in-bool-context 警告问题

我收到警告: 警告:'<<' in boolean context, did you mean '<' ? [-Wint-in-bool-context] for the code similar to the following: int a=7, b=3; int index = ((a << 1) || b...

回答 2 投票 0

MPLAB X32 编译器和将函数移至 RAM 会导致链接器错误

我正在使用 Microchips XC32 C 编译器和工具为 SAM E70 处理器构建可执行文件。 我必须创建一个从 RAM 而不是 ROM/Flash 执行的函数,因为该函数使用特殊...

回答 1 投票 0

“...重新声明为不同种类的符号”?

#包括 #包括 双集成F(双低,双高) { 双低 = 0; 双高 = 20; 双 delta_x=0; 双 x,ans; 双 s = 1/2*...

回答 7 投票 0

在我的 C raylib 项目中,发生了一些奇怪的事情

在这段代码中,狗的本意是“吃”骨头,但骨头并没有被吃掉,而是狗远离了骨头!我觉得这个游戏在欺骗我。 #include“raylib.h” #我...

回答 1 投票 0

-> 和 之间的区别。在结构中?

如果我有一个类似的结构 结构帐户 { int 账户号码; }; 那么这样做有什么区别 myAccount.account_number; 和 我的账户->账户号码; 或者没有什么不同...

回答 8 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.