Java注解与C++预处理指令的比较

5

我能否将C++程序想象成类似于Java注解的东西?我知道#pragma是编译器特定的,但我想知道它们的总体目的是否与Java注解相似。


2
并不是。使用Java注解,您可以自由地定义自己的注解,并编写自己的注解处理器来执行代码生成等操作。 - Oliver Charlesworth
4
注解是一种元信息,可以应用于方法、字段和/或类,并且可以在运行时使用。编译指示是用于向编译器提供有关它将编译的代码片段的指令,只在编译时使用(��们可以导致编译器为链接器生成注释/提示,但我认为它们不是直接由链接器使用的)。 - lucian.pantelimon
1
@lucian.pantelimon 这取决于编译指示。编译指示可能会导致编译器生成在运行时执行的代码,而VC++肯定有影响链接的编译指示。 - James Kanze
1
@JamesKanze 是的,我完全同意你的观点,它们用于操纵对象代码(库、可执行文件)生成的方式。我不记得在没有使用另一个指令(包括宏)的情况下从代码中查询编译指示符是否可能,并且据我所知,它的“值”不能被代码更改 - 只能通过使用另一个指令来更改。因此,pragma 仅在编译时使用。对于改进解释的+1。此外,如果您想提供Abraham可以接受的答案,请随意使用我的评论,否则我将在明天这样做 - 现在有点忙。 - lucian.pantelimon
1
@lucian.pantelimon pragma 在我所知道的实现中并不会像这样在编译器之外传播,但编译器所做的事情肯定会对运行时产生影响,因此一个 pragma 可以间接地影响运行时。例如,一个 pragma 可以生成特别命名的标志,在运行时可以进行查询。(我想这就是你的意思,但应该要明确表述。) - James Kanze
显示剩余2条评论
2个回答

0
http://codesynthesis.com/products/odb/中有一个C++ pragma的示例,类似于Java注释。实际上,它们类似于Hibernate注释:
#pragma db object
class person
{
    ...
    private:
        friend class odb::access;
        person () {}

        #pragma db id
        string email_;

        string name_;
        unsigned short age_;
};

C++中使用类似Java的注解里有更多的信息。


0

Pragma指令与注释不是类似的,它们就是它们的名字所指示的编译器指令。正如先前的回答所指出的那样,可以并且通常在预编译阶段进行处理。

但由于Java编译与C ++不同,这就是差异的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接