我看一些资料说定义全局变量可以声明为near或far型,near为寄存器相对寻址,far为寄存器间接寻址。但我在编程时发现可以使用far类型修饰符,但用near的话(near Uint32 tmp = 0;)软件不能识别关键字,说语法错误,请问是怎么回事?是如果不特别声明全局变量是far类型的都默认为near么?
Shine:
你好,
具体报什么错? 编译器版本号是多少?
Hao Wang5:
回复 Shine:
编译器版本号怎么查?我后来发现好像不是错误,不是error和warning。near下面被划了个黄色波浪线,然后在左边有个问号,说Syntax error。我加上这个near编译后,发现把这个全局变量放到了.bss段里,去掉的话会放在.far段里。请问这是什么情况,为什么会提示Syntax error
Shine:
回复 Hao Wang5:
build的时候在console框里可以看到编译器的版本号
Shine:
回复 Shine:
syntax error是语法错误, 请问是怎么用near keyword定义的?
Hao Wang5:
回复 Shine:
Shine:
回复 Hao Wang5:
near没有显示成粗体, 应该是编译器不认near这个关键字, 这可能是编译器的bug.
你可以去掉near关键字, 默认情况下是near模式.
Hao Wang5:
回复 Shine:
我去掉near试过,如果不用near的话编译后这些变量会被放到.far段内。我现在用near会被放到.bss段内。这是为什么?
Shine:
回复 Hao Wang5:
看一下有没有用–strict_ansi这个编译选项? 如果用的话, 试试改用non-strict_ansi
Hao Wang5:
回复 Shine:
请问怎么查看编译选项?
Shine:
回复 Hao Wang5:
在build configuration里有个language mode选项可以选择