preprocessor-directive相关内容

在宏中使用#

请解释代码 #include#定义A(a,b)a ## b#定义B(a)#a#定义C(a)B(a)主要的(){printf(“%s \ n",C(A(1,2)));printf(“%s \ n",B(A(1,2)));} 输出 12 A(1,2) 我不明白,第一个printf的计算结果如何为12?它不是与第二个相似,因为C宏只是B宏的包装器? 解 ..
发布时间:2021-05-31 19:29:26 其他开发

确定C宏的扩展

是否有办法通过检查已编译的对象或在.c或.h文件中运行某种形式的gcc -E来确定扩展的C宏的“最终值"? test.h #define AAA 1#定义BBB 10#定义CCC(AAA + BBB) test.c #include#include"test.h"int main(){printf(“%d \ n",CCC);返回0;} 因此有某种方法可以 ..
发布时间:2021-04-24 21:03:04 其他开发

用C语言#line是什么意思?

C 语言中的 #line 是什么意思?将在哪里使用? 解决方案 它告诉编译器以下一行的实际来源.通常只有C预处理器添加这些内容,例如,当包含一个文件时,它告诉编译器(基本上只看到一个数据流)我们正在查看其他文件. 这听起来可能很奇怪,但是预处理器只是在您指定要包含的头文件中插入头文件,然后编译器就可以处理所有事情(所有头文件与源代码并置在一起),您可以检查预处理器的结果如果将gcc与 ..
发布时间:2021-04-24 21:01:20 其他开发

将宏替换为C中的宏

我正在尝试使代码段可重用.我下面的评论片段没有按照我的意愿做: #define NAME ABC#定义LOG_SIZE名称## _ LEN 我希望 LOG_SIZE 解析为 ABC_LEN .我曾尝试使用#号,但未能使其正常工作. LOG_SIZE 在所有代码中都被使用,所以我不想将宏更改为: #define LOG_SIZE(name)名称## _ LEN 有没有办法做到这一 ..
发布时间:2021-04-24 21:01:14 其他开发

#define与运算符一起使用

我知道 #define 具有以下语法: #define SYMBOL字符串例如,如果我写 #define ALPHA 2-1#定义测试版ALPHA * 2 然后 ALPHA = 1 但 BETA = 0 .(为什么?) 但是如果我写这样的话 #define ALPHA(2-1)#定义测试版ALPHA * 2 然后 ALPHA = 1 和 BETA = 2 . 有人可以解 ..
发布时间:2021-04-19 20:40:16 C/C++开发

Visual Studio将忽略#if DEBUG/RELEASE范围内的代码,并且不检查错误或自动完成功能

我一直在编写 #if DEBUG , #else , #endif 的代码片段,我注意到Visual Studio并没有不要让我使用自动完成功能来填写部分键入的成员名称,并且它不会检查灰显的非活动代码中是否存在错误.我发现要再次注意的唯一方法是将构建模式从“调试"切换为“发布".但这很不方便,感觉有更好的方法. 示例: #if调试扔;#别的抛出新的异常//我想在这里使用自动完成功能,但是 ..

什么时候执行?

我有一个C代码: ... void caller(){ #定义是1 #定义否0 } ... #define 这两条线将在调用者被调用/执行时执行,还是在编译时执行 解决方案 preprcessor宏不执行,它们只是代码的命名片段,将被预处理器替换使用它们的内容。在此处了解更多信息。 因此,在预处理之后,您的代码将是: void ..
发布时间:2020-10-10 23:19:57 其他开发

在编译时使用X-list和预处理程序指令生成可配置的C代码

我有一个已经包含重复代码的代码库,只有微小的区别,可序列化的ID,索引和变量数组。 代码库很大,并且某些组件正在基于简单的预处理程序指令和常量(例如, #define CFG_PROJECT cfgAutobot )进行激活/停用。 code>, #define CFG_PROJECT cfgUltron ,.. etc)。 功能实际上是相同的,但具有不同的组件和条件。例如: ..
发布时间:2020-10-10 23:19:41 其他开发

#define在#define;预处理器中会发生什么?

如果我有: #define X 5 #define YX 在预处理器中发生什么事情? 是否遍历整个文件并将每个X更改为5, 然后返回到下一个定义,然后将每个Y更改为5(因为在上一次迭代中Y获得了5)? 解决方案 C标准对宏的扩展方式有特殊的术语。 要创建宏时扩展(因为它发生在某些非预处理程序行中,或者发生在必须对其进行扩展的预处理程序行 ..
发布时间:2020-10-10 23:14:24 其他开发

在遇到用户创建的错误后,如何以编程方式强制编译器停止编译过程?

在我的代码中,我正在使用 #error 预处理程序指令来创建错误。但是,它仍然继续构建过程。 遇到错误后,如何强制以编程方式强制构建过程停止? 我正在使用Windows 10的Microsoft Visual Studio 2015,C ++ v140,x86。 解决方案 来自MSDN #error指令在编译时发出用户指定的错误消息 ,然后终止编译。 (已添加强调) ..
发布时间:2020-10-10 23:05:03 C/C++开发

条件预处理器比条件语句的优势

我从未与 #if , #ifdef , #ifndef , #else , #elif 和 #endif 。 在浏览某些源代码时,我发现这些指令被广泛使用。 对条件预处理器进行了一些阅读,但没有发现像它们与常规条件语句有何不同之类的线索。 因此,我想知道以下代码的优点是什么? #include&iostream> int main() { int i = 0; #i ..
发布时间:2020-10-10 22:45:15 C/C++开发