如何处理C++;文件以删除ifdef';d输出代码 < >我继承了一段C++代码,它有很多的代码>IFIFF < /C>分支,根据平台来调整行为(代码在当前的形式下是不可读的,因为这些预处理器指令是嵌套的,发生在函数的中间,甚至在多行语句的中间。
我正在寻找一种方法,以某种方式指定一些预处理器标记,并获取代码的副本,就好像代码已经用这些标记进行了预处理一样。不过,我希望标题保持不变。 例如:如何处理C++;文件以删除ifdef';d输出代码 < >我继承了一段C++代码,它有很多的代码>IFIFF < /C>分支,根据平台来调整行为(代码在当前的形式下是不可读的,因为这些预处理器指令是嵌套的,发生在函数的中间,甚至在多行语句的中间。,c++,c-preprocessor,C++,C Preprocessor,我正在寻找一种方法,以某种方式指定一些预处理器标记,并获取代码的副本,就好像代码已经用这些标记进行了预处理一样。不过,我希望标题保持不变。 例如: #包括 #苹果__ 标准::不能使用。它就是为了这个目的而设计的。我想提一下,这是对我的回答的补充。主要优点是,当与-m一起使用时,它不需要用户取消设置所有他们想要的未定义符号 此代码: #include <iostream> #ifdef __ANDROID__ std::cout << "In Android" <
#包括
#苹果__
标准::不能使用。它就是为了这个目的而设计的。我想提一下,这是对我的回答的补充。主要优点是,当与-m
一起使用时,它不需要用户取消设置所有他们想要的未定义符号
此代码:
#include <iostream>
#ifdef __ANDROID__
std::cout << "In Android" << std::endl;
#endif
#ifndef __WIN32
std::cout << "Not a Windows platform" << std::endl;
#endif
#ifdef __APPLE__
std::cout << "In an Apple platform" << std::endl;
#elif __linux__
std::cout << "In a Linux platform" << std::endl;
#endif
使用unifdef
需要使用
unifdef-D_uuu苹果uuuu安卓uuuuuuuu WIN32-U linux uuuuuuuu示例。cpp
:
#include <iostream>
#ifdef __ANDROID__
std::cout << "In Android" << std::endl;
#endif
#ifndef __WIN32
std::cout << "Not a Windows platform" << std::endl;
#endif
std::cout << "In an Apple platform" << std::endl;
#include <iostream>
std::cout << "Not a Windows platform" << std::endl;
std::cout << "In an Apple platform" << std::endl;
#包括
你能不能只运行C预处理器。。。(但它的可读性比你想象的要差)要求使用工具在这里不是主题,但是大多数编译器(都?)只支持运行预处理器。例如VisualC++中的选项>代码> /e <代码>(加上选项>代码> /EP<代码>和<代码> /P<代码>,检查它们。我想用g++就是选项-E
。只需查看编译器的文档即可。@n.m.非常感谢,刚刚测试了它,效果非常好。你介意用示例用法来回答吗?这样我就可以接受了@Cheers and Hth.-Alf我考虑过了,但它不是用库.h
的内容取代了所有#include
?那就太难读了。
#include <iostream>
#ifdef __ANDROID__
std::cout << "In Android" << std::endl;
#endif
#ifndef __WIN32
std::cout << "Not a Windows platform" << std::endl;
#endif
std::cout << "In an Apple platform" << std::endl;
#include <iostream>
std::cout << "Not a Windows platform" << std::endl;
std::cout << "In an Apple platform" << std::endl;