Skip to content
This repository has been archived by the owner on Dec 11, 2024. It is now read-only.

关于IntegralCast的问题 #29

Answered by Yorkking
szsujyn asked this question in Q&A
Discussion options

You must be logged in to vote

100_int_literal.sysu.c 的问题,这里涉及到类型转换的问题,unsigned int 和 int 转换的问题。观察了一下 clang 的语法树得出结论:

    1. a = b + c: b 和 c 类型不一致时,往类型大的转,比如 int ->unsigned int
    1. a 和 b + c 返回的结果类型不一致时,强行往 a 的类型转.。
      个人的解决方法是,给每个节点引入一个额外的 type 属性,比如问题中的 const int k2 = 0x80000000 + 1; , 首先 0x80000000 加入 "type:unsigned int" 属性, 1 加入 "type:int" 属性。然后在二元表达式运算的时候,比较两个的 type 是否相同,然后按照上述的规则进行类型转换,即插入 ImplicitCastExpr。然后变量声明的时候也做类似的检查 type 操作。

另外,实际上只有这个例子会涉及到复杂的类型转换,只需要针对该例子修改和 const int k2 = 0x80000000 + 1; 相关的文法即可。

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by wu-kan
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants