又要露窃了,问个问题

24 views
Skip to first unread message

谢晓阳

unread,
Dec 8, 2013, 9:12:17 AM12/8/13
to swjtu_op...@googlegroups.com
1.
就是

    int x = 1,y;
    y = 2 * x++;

既然自增运算符的优先级高于乘法运算符,不是应该先x自增1,再用2乘以新的x并赋给y吗?
为什么实际上是用2乘以x并将结果赋给y,然后x增加1呢?
(查赵宏宇的书,故意没有列自增自减运算符的优先级)

2.
我想看bc的源码,然后archlinux下面
cp /var/abs/extra/bc ~/abs -r
cd ~/abs/bc
makepkg
编译不过去  

Jonathan

unread,
Dec 8, 2013, 10:47:29 AM12/8/13
to swjtu_op...@googlegroups.com

=First Question=
  首先你应该搞错的i++的概念,我先大概讲一下吧。

  i++与++i的区别如下:

    * i++:先返回i的值,再将i加1。

    * ++i:先将i加1,再返回i的值。

下面的代码说明了2者的区别。
    int a1 = 5;
    int a2 = 5;
    printf("\n%d", a1++);
    printf("\n%d", ++a2);

//输出:
//5
//6

也就是说,你的表达式2*x++中,不管优先级是怎样的,x总是作为1带进去算的,运算表达式结束后才+1的,如果你用2*++x就会发现输出为4,因为前缀++的优先级是高于*的,而且是从右向左的,我查了下维基百科,而后缀++的优先级居然比前缀++优先级还高,结合性是从左向右。


=Second Question=
怎么说呢,我一般看原来都是直接去该项目的官方网站去下载源码的,你的这种方式没试过,所以没发言权。
在 2013年12月8日星期日UTC+8下午10时12分17秒,28hua写道:

谢晓阳

unread,
Dec 9, 2013, 9:35:00 AM12/9/13
to swjtu_op...@googlegroups.com
为什么你的解释在2 * ++x这考虑优先级,到2 * x++这又不管优先级了?我觉得这或许压根不是优先级的问题。再复习优先级结合性还有副作用顺序点这些有点懵了。

你有自己编译过软件吗,如果想要自己编译是要修改哪个文件,configure,Makefile?看abs的wiki说可以修改PKGBUILD。从直接从官网下的源码可以编译过去,觉得哪个PKGBUILD可能有点问题。

在 2013年12月8日星期日,Jonathan 写道:
--
您收到此邮件是因为您订阅了 Google 网上论坛的“西南交通大学开源社区邮件组”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 swjtu_opensour...@googlegroups.com
通过以下网址访问此论坛:http://groups.google.com/group/swjtu_opensource。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。

薛铭乾

unread,
Dec 9, 2013, 10:08:02 AM12/9/13
to 交大开源谷歌论坛

超哥说的没错,看编译后的汇编代码就清楚了
你也不用质疑他是不是编译过软件,没有任何人会对一个自己不知道的bug有解决方案的
PKGBUILD不过是编译脚本信息罢了,应该不难看懂,按照自己手动编译的过程检查一下

li

unread,
Dec 9, 2013, 10:14:26 AM12/9/13
to swjtu_op...@googlegroups.com
һ����˵�������ص�Դ������и�readme�ļ���������������ô���밲װ��
�����configure�ļ��Ļ�������˳��Ӧ����:
./configure  [��������ز���]
make
make install

PKBUILDֻ��archlinux����Ա����һ����װ�ɣ������ȥwiki�Ͽ��¾����÷�����һ�㰲װ���Ҫô�ǹ�����Դ�밲װ��Ҫô ֻ��aur����װ��������Ҫ�Լ���PKBUILD�ļ���


�� 2013/12/9 22:35, ��� �:
Ϊʲô��Ľ�����2 * ++x�⿼�����ȼ�����2 * x++���ֲ������ȼ��ˣ��Ҿ��������ѹ�������ȼ������⡣�ٸ�ϰ���ȼ�����Ի��и�����˳�����Щ�е����ˡ�

�����Լ����������������Ҫ�Լ�������Ҫ�޸��ĸ��ļ���configure��Makefile����abs��wiki˵�����޸� PKGBUILD����ֱ�Ӵӹ����µ�Դ����Ա����ȥ�������ĸ�PKGBUILD�����е����⡣

�� 2013��12��8�������գ�Jonathan д����

=First Question=
  ������Ӧ�ø���i++�ĸ�����ȴ�Ž�һ�°ɡ�

  i++��++i��������£�

    * i++:�ȷ���i��ֵ���ٽ�i��1��

    * ++i:�Ƚ�i��1���ٷ���i��ֵ��

����Ĵ���˵����2�ߵ����
    int a1 = 5;
    int a2 = 5;
    printf("\n%d", a1++);
    printf("\n%d", ++a2);

//�����
//5
//6

Ҳ����˵����ı��ʽ2*x++�У��������ȼ�������ģ�x������Ϊ1���ȥ��ģ�������ʽ����� ��+1�ģ��������2*++x�ͻᷢ�����Ϊ4,��Ϊǰ׺++�����ȼ��Ǹ���*�ģ������Ǵ�������ģ��Ҳ����� ά��ٿƣ����׺++�����ȼ���Ȼ��ǰ׺++���ȼ����ߣ�������Ǵ������ҡ�


=Second Question=
��ô˵�أ���һ�㿴ԭ������ֱ��ȥ����Ŀ�Ĺٷ���վȥ���� Դ��ģ�������ַ�ʽû�Թ�����û����Ȩ��
�� 2013��12��8��������UTC+8����10ʱ12��17�룬28huaд����
1.
����

    int x = 1,y;
    y = 2 * x++;

��Ȼ�������������ȼ����ڳ˷��������Ӧ����x����1������2�����µ�x������y��
Ϊʲôʵ��������2����x��������y��Ȼ��x����1�أ�
�����Ժ�����飬����û���������Լ����������ȼ���

2.
���뿴bc��Դ�룬Ȼ��archlinux����
cp /var/abs/extra/bc ~/abs -r
cd ~/abs/bc
makepkg
���벻��ȥ  
--
���յ����ʼ�����Ϊ������ Google ������̳�ġ����Ͻ�ͨ��ѧ��Դ�����ʼ��顱��̳��
Ҫ�˶�����̳��ֹͣ���մ���̳�ĵ����ʼ����뷢�͵����ʼ��� swjtu_opensour...@googlegroups.com��
ͨ��������ַ���ʴ���̳��http://groups.google.com/group /swjtu_opensource��
Ҫ�鿴���ѡ������ https://groups.google.com/groups /opt_out��
--
���յ����ʼ�����Ϊ������ Google ������̳�ġ����Ͻ�ͨ��ѧ��Դ�����ʼ��顱��̳��
Ҫ�˶�����̳��ֹͣ���մ���̳�ĵ����ʼ����뷢�͵����ʼ��� swjtu_opensour...@googlegroups.com��
ͨ��������ַ���ʴ���̳��http://groups.google.com /group/swjtu_opensource��
Ҫ�鿴���ѡ������ https://groups.google.com /groups/opt_out��




�˵����ʼ����������Ͷ����������Ϊ avast! ɱ����� �������ڻ״̬��


谢晓阳

unread,
Dec 9, 2013, 10:15:36 AM12/9/13
to swjtu_op...@googlegroups.com
我没有质疑他啊,想学着定制软件罢了,我要是懂汇编还来这里问干嘛。

solo wing

unread,
Dec 11, 2013, 5:20:01 AM12/11/13
to swjtu_op...@googlegroups.com
这个问题要搞清楚你要计算哪个表达式的结果。其实很简单,2 * ++x这个是个表达式,自增优先级高于乘法,所以结果是4,2*x++,自增优先级好像还是大于乘法,但是尽管先算x++,但此时x还是等于1,要等该语句执行完之后,x才变为2,所以2*x++的结果是2,但该语句执行完自后,x的结果才变为2。只是一个前自增和后自增的区别。
Message has been deleted

solo wing

unread,
Dec 11, 2013, 5:22:40 AM12/11/13
to swjtu_op...@googlegroups.com
回复的时候,记得把自动引用文字删了,不然看着蛋疼。

solo wing

unread,
Dec 11, 2013, 5:31:19 AM12/11/13
to swjtu_op...@googlegroups.com
都有makefile文件了,那就肯定有源代码啦,makefile文件就是用来指定编译顺序和中间过程链接文件的。

solo wing

unread,
Dec 11, 2013, 5:31:29 AM12/11/13
to swjtu_op...@googlegroups.com
都有makefile文件了,那就肯定有源代码啦,makefile文件就是用来指定编译顺序和中间过程链接文件的。
Reply all
Reply to author
Forward
0 new messages