Eclipse CDT isConst 检查
Eclipse CDT isConst check
我有一个简单的 Pointer.c 文件:
#include<stdio.h>
// Pointer To Constant
const int* ptrToConst ;
//Constant Pointer
int* const ConstPtr ;
当我通过 Eclipse 解析它时 CDT:
File f = new File("C:/Data/Pointer.c");
IASTTranslationUnit ast = ASTProvider.getInstance().getASTWithoutCache(f);
for (IASTDeclaration d : ast.getDeclarations()) {
IASTSimpleDeclaration sd = (IASTSimpleDeclaration) d;
System.out.println("Variable Name: " + sd.getDeclarators()[0].getName());
System.out.println("Is Constant: " + sd.getDeclSpecifier().isConst() + "\n");
}
输出为:
Variable Name: ptrToConst
Is Constant: true
Variable Name: ConstPtr
Is Constant: false
根据输出,第一个指向常量的变量被解析为 constant 而另一个常量指针则不是。我不明白这种行为,为什么会这样? CDT 对指针变量的理解是否不同?根据我的理解,输出应该正好相反。
调试时检查第二种情况的变量d细节:
自(参见 this answer)
const int* ptrToConst
声明一个指向 常量整数 和 的指针(可以修改)
int* const ConstPtr
声明一个 contant 指针 指向一个整数(可以修改),
第二种情况sd.getDeclSpecifier().isConst()
returns false
.
所以在第二种情况下,const
修饰符可以在更深的抽象语法树中找到pointer operators 而不是(正如您自己发现的那样)。
我有一个简单的 Pointer.c 文件:
#include<stdio.h>
// Pointer To Constant
const int* ptrToConst ;
//Constant Pointer
int* const ConstPtr ;
当我通过 Eclipse 解析它时 CDT:
File f = new File("C:/Data/Pointer.c");
IASTTranslationUnit ast = ASTProvider.getInstance().getASTWithoutCache(f);
for (IASTDeclaration d : ast.getDeclarations()) {
IASTSimpleDeclaration sd = (IASTSimpleDeclaration) d;
System.out.println("Variable Name: " + sd.getDeclarators()[0].getName());
System.out.println("Is Constant: " + sd.getDeclSpecifier().isConst() + "\n");
}
输出为:
Variable Name: ptrToConst
Is Constant: true
Variable Name: ConstPtr
Is Constant: false
根据输出,第一个指向常量的变量被解析为 constant 而另一个常量指针则不是。我不明白这种行为,为什么会这样? CDT 对指针变量的理解是否不同?根据我的理解,输出应该正好相反。
调试时检查第二种情况的变量d细节:
自(参见 this answer)
const int* ptrToConst
声明一个指向 常量整数 和 的指针(可以修改)
int* const ConstPtr
声明一个 contant 指针 指向一个整数(可以修改),
第二种情况sd.getDeclSpecifier().isConst()
returns false
.
所以在第二种情况下,const
修饰符可以在更深的抽象语法树中找到pointer operators 而不是(正如您自己发现的那样)。