preprocessor-directive相关内容
以下面的宏为例: #define _CREATE_VAR(X1)double X1 {smc :: define_variable(data,X1,#X1)};#define _CREATE_VAR2(X1,X2)double X1 {smc :: define_variable(data,X1,#X1)}};/双重X2 {smc :: define_variable(data,X2,#X2)
..
请解释代码 #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宏的包装器? 解
..
这里是完整程序.你能找出它的控制台输出吗? #import#define kEnv是#if kEnv#定义x @"abc";#别的#define x @"xyz"#万一#define kVersion true#if kVersion#定义y @"abc";#别的#define y @"xyz"#万一int main(int argc,con
..
是否有办法通过检查已编译的对象或在.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;} 因此有某种方法可以
..
我想将一些C代码拆分为头文件和源文件: #ifndef BENCHMARK_H#define BENCHMARK_H#ifdef WIN32#include双重get_time(){LARGE_INTEGER t,f;QueryPerformanceCounter(&t);QueryPerformanceFrequency(& f);返回(double)t.QuadPa
..
假设我有以下两组P_A,P_B,P_C值 #define X_P_A 2#定义X_P_B 3#定义X_P_C 4#定义Y_P_A 5#定义Y_P_B 6#定义Y_P_C 7 共有3种类型的用户:-一次只需要X个变体,一次只需要Y个变体,而一次可能需要两者. 例如 #ifdef X#定义P_A X_P_A#定义P_B X_P_B#定义P_C X_P_C#万一#ifdef Y#定义P
..
C 语言中的 #line 是什么意思?将在哪里使用? 解决方案 它告诉编译器以下一行的实际来源.通常只有C预处理器添加这些内容,例如,当包含一个文件时,它告诉编译器(基本上只看到一个数据流)我们正在查看其他文件. 这听起来可能很奇怪,但是预处理器只是在您指定要包含的头文件中插入头文件,然后编译器就可以处理所有事情(所有头文件与源代码并置在一起),您可以检查预处理器的结果如果将gcc与
..
我正在尝试使代码段可重用.我下面的评论片段没有按照我的意愿做: #define NAME ABC#定义LOG_SIZE名称## _ LEN 我希望 LOG_SIZE 解析为 ABC_LEN .我曾尝试使用#号,但未能使其正常工作. LOG_SIZE 在所有代码中都被使用,所以我不想将宏更改为: #define LOG_SIZE(name)名称## _ LEN 有没有办法做到这一
..
我正在这样尝试在我的主要wxs文件中向安装程序添加文件.
..
我想使用预处理程序命令来控制代码执行路径.因为这样可以节省运行时间. #if(sizeof(T)== 1 未能正确执行错误:C1017 template字符串类{上市:静态void showSize(){#if(sizeof(T)== 1)cout
..
我知道 #define 具有以下语法: #define SYMBOL字符串例如,如果我写 #define ALPHA 2-1#定义测试版ALPHA * 2 然后 ALPHA = 1 但 BETA = 0 .(为什么?) 但是如果我写这样的话 #define ALPHA(2-1)#定义测试版ALPHA * 2 然后 ALPHA = 1 和 BETA = 2 . 有人可以解
..
我一直在编写 #if DEBUG , #else , #endif 的代码片段,我注意到Visual Studio并没有不要让我使用自动完成功能来填写部分键入的成员名称,并且它不会检查灰显的非活动代码中是否存在错误.我发现要再次注意的唯一方法是将构建模式从“调试"切换为“发布".但这很不方便,感觉有更好的方法. 示例: #if调试扔;#别的抛出新的异常//我想在这里使用自动完成功能,但是
..
我有一个C代码: ... void caller(){ #定义是1 #定义否0 } ... #define 这两条线将在调用者被调用/执行时执行,还是在编译时执行 解决方案 preprcessor宏不执行,它们只是代码的命名片段,将被预处理器替换使用它们的内容。在此处了解更多信息。 因此,在预处理之后,您的代码将是: void
..
我有一个已经包含重复代码的代码库,只有微小的区别,可序列化的ID,索引和变量数组。 代码库很大,并且某些组件正在基于简单的预处理程序指令和常量(例如, #define CFG_PROJECT cfgAutobot )进行激活/停用。 code>, #define CFG_PROJECT cfgUltron ,.. etc)。 功能实际上是相同的,但具有不同的组件和条件。例如:
..
如果我有: #define X 5 #define YX 在预处理器中发生什么事情? 是否遍历整个文件并将每个X更改为5, 然后返回到下一个定义,然后将每个Y更改为5(因为在上一次迭代中Y获得了5)? 解决方案 C标准对宏的扩展方式有特殊的术语。 要创建宏时扩展(因为它发生在某些非预处理程序行中,或者发生在必须对其进行扩展的预处理程序行
..
我有以下代码 #define PROC_ADD void main(void) { while(1) { #ifdef PROC_ADD //在此处执行此代码,然后取消定义它以在else //中运行代码工作 #undef PROC_ADD #else //现在已经定义了PROC_ADD,请运行此代码 //处理工作 #endif } }
..
在我的代码中,我正在使用 #error 预处理程序指令来创建错误。但是,它仍然继续构建过程。 遇到错误后,如何强制以编程方式强制构建过程停止? 我正在使用Windows 10的Microsoft Visual Studio 2015,C ++ v140,x86。 解决方案 来自MSDN #error指令在编译时发出用户指定的错误消息 ,然后终止编译。 (已添加强调)
..
我从未与 #if , #ifdef , #ifndef , #else , #elif 和 #endif 。 在浏览某些源代码时,我发现这些指令被广泛使用。 对条件预处理器进行了一些阅读,但没有发现像它们与常规条件语句有何不同之类的线索。 因此,我想知道以下代码的优点是什么? #include&iostream> int main() { int i = 0; #i
..
我正在查看一些 C 源代码,但我听不懂以下部分 #if 1 typedef unsigned short PronId; typedef unsigned short LMId; #define LM_NGRAM_INT #else typedef unsigned int LMId; typedef unsigned int PronId; #unde
..
我知道您可以使用CMake的 configure_file 使CMake变量可用于您的程序。例如,我可以使用 #define $ {CMAKE_BUILD_TYPE} 导致 #define Release 但是,为了使我的代码更易读,我希望定义 #define BUILD_TYPE_RELEASE 有没有简单的方法可
..