gpt4 book ai didi

c++ - 如何知道 IntegerLiteral 是来自 Clang 的十进制还是八进制表示?

转载 作者:太空狗 更新时间:2023-10-29 21:20:14 25 4
gpt4 key购买 nike

您可能知道,Clang 库中的整数值由 IntegerLiteral class 处理.

但是,实际上,这两个任务之间似乎没有区别:

int i,j;
// i is assigned 42 with octal representation (052)
i = 052;
//j is assigned 42 with decimal representation (42)
j = 42;

AST-dump 产生相同的树:

|-DeclStmt 0x1cbc5b0 <line:2:2, col:9>
| |-VarDecl 0x1cbc4d0 <col:2, col:6> i 'int'
| `-VarDecl 0x1cbc540 <col:2, col:8> j 'int'
|-BinaryOperator 0x1cbc610 <line:4:2, col:6> 'int' lvalue '='
| |-DeclRefExpr 0x1cbc5c8 <col:2> 'int' lvalue Var 0x1cbc4d0 'i' 'int'
| `-IntegerLiteral 0x1cbc5f0 <col:6> 'int' 42
|-BinaryOperator 0x1cbc680 <line:5:2, col:6> 'int' lvalue '='
| |-DeclRefExpr 0x1cbc638 <col:2> 'int' lvalue Var 0x1cbc540 'j' 'int'
| `-IntegerLiteral 0x1cbc660 <col:6> 'int' 42

我想发出一些警告,因为使用八进制表示可能会被误解。我可以区分 Clang 解析这两种表示的方式吗?

最佳答案

调用 clang::Lexer::getSpelling,将 IntegerLiteralSourceLocation 传递给它。然后,您可以对八进制或您感兴趣的任何其他拼写属性进行手动测试(例如,查找前导 '0' 后跟数字)。手动执行此检查还可以让您正确处理一些特殊情况——例如,0 在技术上是一个 octal-literal,但您可能不想处理它那样。

关于c++ - 如何知道 IntegerLiteral 是来自 Clang 的十进制还是八进制表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com