c-preprocessor相关内容

用于寻址外围设备的#define 与枚举

我必须在基于 ARM9 的微控制器中对外围寄存器进行编程. 例如,对于 USART,我将相关的内存地址存储在 enum 中: 枚举 USART{US_BASE = (int) 0xFFFC4000,US_BRGR = US_BASE + 0x16,//...}; 然后,我在函数中使用指针来初始化寄存器: void init_usart (void){vuint* pBRGR = (vu ..
发布时间:2022-01-25 13:03:30 其他开发

C 中的静态、定义和常量

我已经读过静态变量在函数内部使用,当人们不希望每次调用函数时变量值都改变/初始化.但是如何在“main"之前在主程序中定义一个静态变量,例如 #include 静态双 m = 30000;诠释主要(无效){值 = m * 2 + 3;} 这里的变量 m 有一个常量值,以后在主程序中不会被修改.在同一思路下,使用这些而不是使用静态定义有什么不同: const double m ..
发布时间:2022-01-23 23:51:29 其他开发

为什么有人会使用#define 来定义常量?

这是一个简单的问题,但为什么有人会使用#define 来定义常量? 有什么区别 #define sum 1 和 const int sum = 1; 解决方案 #define 有许多不同的应用程序,但您的问题似乎是关于一个特定的应用程序:定义命名常量. 在 C++ 中,很少有理由使用 #define 来定义命名常量. #define 通常在 C 代码中广泛使用,因为 ..
发布时间:2022-01-23 23:12:47 C/C++开发

sizeof(enum) == sizeof(int) 总是吗?

sizeof(enum) == sizeof(int),总是吗? 还是依赖于编译器? 这是错误的说法,因为编译器针对字长(内存对齐)进行了优化,即 y int 是特定编译器的字长?这是否意味着如果我使用枚举就没有处理惩罚,因为它们是字对齐的? 如果我将所有返回码放在一个枚举中不是更好吗,因为我显然不担心它得到的值,只担心检查返回类型时的名称.如果是这种情况,#DEFINE 会不会更好,因 ..
发布时间:2022-01-23 23:11:32 其他开发

如何比较 C 条件预处理器指令中的字符串

我必须在 C 中做这样的事情.它只有在我使用 char 时才有效,但我需要一个字符串.我该怎么做? #define USER "jack"//杰克或皇后#if USER == "杰克"#define USER_VS“女王"#elif 用户 == “女王"#define USER_VS “杰克"#万一 解决方案 我认为没有办法完全在预处理器指令中进行可变长度字符串比较.不过,您也许可以执行以下 ..
发布时间:2022-01-20 23:08:00 其他开发

如何使用 Dev-C++ IDE 保存预处理器输出?

我希望能够查看预处理器输出,以确保我的预处理器指令正确运行.Dev-C++ 在 Tools > Compiler Options... > General 中有一个选项可以在调用编译器时添加命令,我已经添加了命令 -E C:\Personal\preprocessed.cpp.我得到一个编译器错误,说该文件不存在,但在这种情况下编译器不应该只创建文件吗?我创建了文件,现在我收到了这个错误:不能用 ..
发布时间:2022-01-20 21:57:39 其他开发

确定预处理器中的优化级别?

-Og 是一个相对较新的优化选项,旨在在应用优化的同时改善调试体验.如果用户选择 -Og,那么我希望我的源文件激活备用代码路径以增强调试体验.GCC 提供 __OPTIMIZE__预处理器宏,但仅在优化生效时设置为 1. 有没有办法学习优化级别,如 -O1、-O3 或 -Og,与预处理器一起使用? 解决方案 我相信这不可能直接知道用于编译软件的优化级别,因为这不在 定义的预处理器符号 ..
发布时间:2022-01-20 20:24:20 其他开发

C/C++ 需要一种聪明的方法来跟踪函数调用

我正在寻找一种聪明的方法来跟踪函数调用和返回.我知道我可以使用调试器,但我想要一种方法,让它在调用函数而不是单步执行代码时将某些内容打印到终端. 我在想我也许可以使用预处理器,但我不确定最好的方法是什么. 或者有没有办法使用 gdb 打印出有用的信息,而不必单步执行代码. 解决方案 大多数编译器允许您在函数调用之前和之后注入检测函数. 在 MSVC 中,它们是 _penter 和 ..
发布时间:2022-01-20 20:19:33 C/C++开发

如何在 GDB 中打印 #defined 常量?

根据主题. 我有一些常量哈希定义如下: #define CONST 40 我在我的程序中设置了一个断点.如何打印该常量的值?(我知道我可以只看源代码,但我想确定一下) 解决方案 帮助宏 您必须使用 -g3 标志进行编译才能使其工作并在加载宏之前启动您的程序. 在你的情况下: 信息宏 CONST 或 宏展开 CONST 更多信息:http://sourceware. ..
发布时间:2022-01-20 19:59:36 其他开发

为什么编译器没有定义 __ARM_FEATURE_CRC32?

我已经研究这个问题一段时间了,我希望有人能指出我的错误.我想我再也看不到森林了. 我有一个用于测试的 LeMaker HiKey 开发板.它的 AArch64,因此它具有 NEON 和其他 cpu 功能,如 AES、SHA 和 CRC32: $ cat/proc/cpuinfo处理器:AArch64 处理器版本 3 (aarch64)...特点: fp asimd evtstrm aes ..
发布时间:2022-01-17 13:55:18 C/C++开发

常量 C 表达式是在编译时还是在运行时计算的?

如果我编写一个使用其他预处理器常量执行操作的 #define,那么每次宏在运行时出现时都会计算最终值吗?这取决于编译器中的优化,还是包含在标准中? 例子: #define EXTERNAL_CLOCK_FREQUENCY 32768#define TIMER_1_S EXTERNAL_CLOCK_FREQUENCY#define TIMER_100_MS TIMERB_1_S/10 每次 ..

#warning 预处理器指令的可移植性

我知道#warning 指令不是标准的C/C++,但有几个编译器支持它,包括gcc/g++.但是对于那些不支持它的人,他们会默默地忽略它还是会导致编译失败?换句话说,我可以在我的项目中安全地使用它而不破坏不支持它的编译器的构建吗? 解决方案 如果编译器不支持#warning,那么很可能会报错.与#pragma 不同,不建议预处理器忽略它不理解的指令. 话虽如此,我已经在各种不同(相当 ..

“文件末尾没有换行符"编译器警告

在某些 C++ 编译器中出现以下警告的原因是什么? 文件末尾没有换行符 为什么我应该在源文件/头文件的末尾有一个空行? 解决方案 想想如果没有换行可能会出现的一些问题.根据 ANSI 标准,文件开头的 #include 将文件完全按原样插入到文件的前面,并且不会在 #include 之后插入新行.foo.h> 在文件内容之后.因此,如果您在解析器的末尾包含一个没有换行符的文件, ..
发布时间:2022-01-17 00:03:38 C/C++开发

什么是 WINAPI_FAMILY_ONECORE_APP?

我在 GitHub 上查看 Microsoft 的 OpenSSL 端口.一个提交引起了我的注意,它是 添加 Win10 通用平台支持.在提交中,出现了一个名为 WINAPI_FAMILY_ONECORE_APP 的分区.但是,我在搜索时并没有找到太多关于它的信息.英文有2个,中文有22个(见下文). 以下 Visual Studio Tools for Windows 10 Preview ..
发布时间:2022-01-15 15:28:24 其他开发