| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6307 人关注过本帖
标题:关于能否获取寄存器变量的地址的问题
只看楼主 加入收藏
蹴鞠者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:134
注 册:2016-9-26
结帖率:75%
收藏
 问题点数:0 回复次数:11 
关于能否获取寄存器变量的地址的问题
程序代码:
#include<stdio.h>
int main()
{
    register int i = 1;
    printf("%d\n", &i);
    return 0;
}

书上说无法获取寄存器变量的地址,那我通过上面的代码可以输出变量的地址,这样算是获取寄存器变量的地址吗

[此贴子已经被作者于2017-5-5 09:33编辑过]

搜索更多相关主题的帖子: 寄存器 
2017-05-05 09:31
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
这很简单,因为你的编译器直接无视了这个关键字。

在GCC上,这段代码,连编译都通不过。

ceshi4.c: In function 'main':
ceshi4.c:5:5: error: address of register variable 'i' requested
     printf("%d\n", &i);
     ^

[此贴子已经被作者于2017-5-5 09:45编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-05 09:39
蹴鞠者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:134
注 册:2016-9-26
收藏
得分:0 
回复 2楼 renkejun1942
我在VC6.0上运行没问题
2017-05-05 09:53
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 3楼 蹴鞠者
拿VC说事儿,我怀疑你的理性已经崩坏了。

[此贴子已经被作者于2017-5-5 11:16编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-05 10:23
蹴鞠者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:134
注 册:2016-9-26
收藏
得分:0 
回复 4楼 renkejun1942
新手一枚,那什么软件好用呢,最好是支持c99标准的
2017-05-05 11:30
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
Gcc 和 Clang 都完整支持,乃至完全支持C11。
完全支持C11,Gcc需要5.1版本
Clang,需要3.1以上的版本

还有一些小众的编译器,PellesC。

https://bbs.bccn.net/thread-476466-1-1.html
关于GCC的安装,你可以查看这个帖子,嗯……不过你得看很多很多楼。


VS2015不完全支持C99.
Dev C++不完全支持。
最好别用Dev C++,这款编译器已经停止更新了,而且据说,也不完全据说,反正我自己当时用的时候是用不了调试功能的。

[此贴子已经被作者于2017-5-5 11:39编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-05 11:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:0 
以下是引用蹴鞠者在2017-5-5 09:53:38的发言:

我在VC6.0上运行没问题
VC6.0 也不行
我怀疑你在VC6.0上是将它用C++方式编译的,而不是C方式编译的。

在C标准中,register变量即便没有优化到寄存器,也不可以取地址
在C++标准中,register变量可以取地址;C++17之后此关键字被废弃。
2017-05-05 12:28
蹴鞠者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:134
注 册:2016-9-26
收藏
得分:0 
回复 7楼 rjsp
怎么区分是C编译还是c++编译呢
2017-05-05 13:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9030
专家分:54050
注 册:2011-1-18
收藏
得分:0 
以下是引用蹴鞠者在2017-5-5 13:37:11的发言:

怎么区分是C编译还是c++编译呢
VC 用扩展名来区分
.c 就是当成C代码来编译
.cpp 就是当成C++代码来编译
2017-05-05 14:55
蹴鞠者
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:134
注 册:2016-9-26
收藏
得分:0 
回复 9楼 rjsp
谢谢了
2017-05-05 15:17
快速回复:关于能否获取寄存器变量的地址的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025488 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved