相关疑难解决方法(0)

多行预处理器宏

如何制作多行预处理器宏?我知道怎么做一行:

#define sqr(X) (X*X)
Run Code Online (Sandbox Code Playgroud)

但我需要这样的东西:

#define someMacro(X)
    class X : public otherClass
    {
         int foo;
         void doFoo();
    };
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它发挥作用?

这只是一个例子,真正的宏可能很长.

c c++ c-preprocessor

69
推荐指数
5
解决办法
6万
查看次数

C预处理器的替换

我有兴趣使用C预处理器以外的东西来预处理我的C和Objective-C源代码.有好的选择吗?

一个例子是允许一个人逃脱到C代码中间的python或perl片段,并且片段吐出C然后编译为正常.

c objective-c c-preprocessor

40
推荐指数
7
解决办法
1万
查看次数

如何让G ++预处理器在宏中输出换行符?

在gcc/g ++ 4.*中是否有一种方法可以编写一个扩展为多行的宏?

以下代码:

#define A X \ Y
Run Code Online (Sandbox Code Playgroud)

扩展到

X Y
Run Code Online (Sandbox Code Playgroud)

我需要一个宏扩展到

X
Y
Run Code Online (Sandbox Code Playgroud)

c++ newline g++ c-preprocessor

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

如何让预处理器将换行符插入到宏扩展结果中?

使用C/C++宏,很容易自动生成长结构.例如,如果我想要一组大量的方法不会抛出异常(对于暴露于COM的方法必须这样做),我可以这样做:

#define BEGIN_COM_METHOD\
    try{

#define END_COM_METHOD\
    return S_OK;\
    } catch( exception& ) {\
        // set IErrorInfo here\
        return E_FAIL;\
    }
Run Code Online (Sandbox Code Playgroud)

为了使这些宏可管理,可以使用"\"字符使宏定义多行并且更具可读性.

问题是有时带有这种结构的代码将无法编译 - 某些东西不会按预期扩展,并且编译器将出现无效代码.编译器通常具有"生成预处理文件"选项,以向开发人员显示预处理结果.但是在预处理文件中,宏被扩展为一行,结果几乎不可读.

是否可以使预处理器保持宏定义中存在的换行符?

c++ macros c-preprocessor

7
推荐指数
1
解决办法
3677
查看次数

标签 统计

c-preprocessor ×4

c++ ×3

c ×2

g++ ×1

macros ×1

newline ×1

objective-c ×1