相关疑难解决方法(0)

我怎么看C/C++源文件在Visual Studio预处理后?

比方说,我有许多预处理指令源文件.是否有可能看到它的外观预处理器是用它做之后?

c c++ debugging visual-studio-2005 c-preprocessor

201
推荐指数
8
解决办法
9万
查看次数

是否有一个C预处理器根据定义/未定义的值消除#ifdef块?

原始问题

我想要的不是标准的C预处理器,而是可以从某个地方接受的变体 - 可能是命令行通过-DNAME1和-UNAME2选项 - 定义了哪些宏的规范,然后消除了死码.

通过一些例子可能更容易理解我所追求的内容:

#ifdef NAME1
#define ALBUQUERQUE "ambidextrous"
#else
#define PHANTASMAGORIA "ghostly"
#endif
Run Code Online (Sandbox Code Playgroud)

如果命令是使用'-DNAME1'运行的,则输出将为:

#define ALBUQUERQUE "ambidextrous"
Run Code Online (Sandbox Code Playgroud)

如果命令是使用'-UNAME1'运行的,则输出将为:

#define PHANTASMAGORIA "ghostly"
Run Code Online (Sandbox Code Playgroud)

如果命令是在没有选项的情况下运行的,则输出将与输入相同.

这是一个简单的例子 - 我希望代码也可以处理更复杂的情况.

用现实世界但仍然简单的例子来说明:

#ifdef USE_VOID
#ifdef PLATFORM1
#define VOID void
#else
#undef VOID
typedef void    VOID;
#endif /* PLATFORM1 */
typedef void *  VOIDPTR;
#else
typedef mint     VOID;
typedef char *  VOIDPTR;
#endif /* USE_VOID */
Run Code Online (Sandbox Code Playgroud)

我想运行命令-DUSE_VOID -UPLATFORM1并获取输出:

#undef VOID
typedef void    VOID;
typedef void *  VOIDPTR;
Run Code Online (Sandbox Code Playgroud)

另一个例子:

#ifndef DOUBLEPAD
#if …
Run Code Online (Sandbox Code Playgroud)

c c++ preprocessor

36
推荐指数
3
解决办法
1万
查看次数

GCC预处理器

可能重复:
运行GCC预处理器

是否有GCC选项使GCC预处理器生成C源代码但过滤掉不相关的源代码?

例如,C文件必须#define switch为许多不同的平台定义.我只是在一个平台上,所以我希望C预处理器过滤掉不相关的代码.GCC是否支持这一点?

gcc c-preprocessor

9
推荐指数
3
解决办法
3万
查看次数

使用C中的宏处理操作

我刚开始处理Macros而且我偶然发现了一个我无法理解的练习.有人可以向我解释这里发生了什么吗?如果我编译我可以看到输出是什么,但我自己无法得到它.先感谢您!

#define M(varname, index) ( ( (unsigned char*) & varname )[index] ) 

int main(void) {
int a = 0x12345678; 
printf( "%x %x\n", M(a,0), M(a,3) );
printf( "%x %x\n", M(a,1), M(a,2) );
}
Run Code Online (Sandbox Code Playgroud)

c macros

4
推荐指数
1
解决办法
67
查看次数