| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1839 人关注过本帖
标题:在编程学习过程中遇到的一些很低级的问题,请大侠赐教!
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没有,没见过有人这样写。

授人以渔,不授人以鱼。
2015-01-03 14:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在vc中测试的结果:
1.如果变量仅被声明而没有初始化,但在代码中又使用这个变量,则编译时直接报错,编译不通过。
2.如果变量仅被声明而没有初始化,但在代码中没有使用这个变量,则这个变量被废除,等于不存在。
3.如果变量被声明,然后在代码中赋值,则是在运行中值压栈。
4.如果变量在定义时初始化,结果与3相同,即表明赋值初始化与运行时赋值是一样的。

在其他编译器中不知道。

授人以渔,不授人以鱼。
2015-01-03 14:26
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
查了一下网上的资料main内的static有这么用途
程序代码:
int main(void) {
    static int a[100000][11];
    return 0;
}

用来在堆上分配栈上不能满足的内存空间

不知道除此之外还有什么用途?

Only the Code Tells the Truth             K.I.S.S
2015-01-03 14:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 33楼 longwu9t
那为什么不直接在外部申请呢?要把代码弄晦涩了呢?

授人以渔,不授人以鱼。
2015-01-03 14:45
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 34楼 TonyDeng
是的 竾觉着是这样的
还不如声明个全局变量
只不过多了个作用域隔离的作用反而让代码读起来不清晰

Only the Code Tells the Truth             K.I.S.S
2015-01-03 14:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
static在普通底层函数中用的,起把变量可见性局限在局部的作用,函数级别越高,这种作用越小,像main()这种最高级的函数,就等于置在模块全局之中。即使是局部变量,在main()中也应尽量少用,人家的main()很短的,哪有这里那么多新人那样长。

授人以渔,不授人以鱼。
2015-01-03 14:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用longwu9t在2015-1-3 14:49:33的发言:

是的 竾觉着是这样的
还不如声明个全局变量
只不过多了个作用域隔离的作用反而让代码读起来不清晰

我常说有人爱玩代码、玩高深,就是指这种,毫无必要的炫耀“技术”。

授人以渔,不授人以鱼。
2015-01-03 15:00
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2015-1-3 14:16:37的发言:

再改27楼的代码是这样:

 
#include  
#include  
 
int main(void)
{
    int x;
    return EXIT_SUCCESS;
}


 
; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.61030.0
 
    TITLE    F:\Projects\Visual Studio 2012\Projects\test\test11\test11.cpp
    .686P
    .XMM
    include listing.inc
    .model    flat
 
INCLUDELIB OLDNAMES
 
EXTRN    @__security_check_cookie@4:PROC
PUBLIC    _main
; Function compile flags: /Ogtp
; File f:\projects\visual studio 2012\projects\test\test11\test11.cpp
;    COMDAT _main
_TEXT    SEGMENT
_main    PROC                        ; COMDAT
 
; 6    :     int x;
; 7    :     return EXIT_SUCCESS;
 
    xor    eax, eax
 
; 8    : }
 
    ret    0
_main    ENDP
_TEXT    ENDS
END


这个变量被直接废掉了。

你这些栗子都是编译优化的情况 那还有不优化的呢 没有说服力
2015-01-03 15:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
没人发布程序是带调试信息的,也没有人靠带着调试模式写程序而认为那是实际效果的。

授人以渔,不授人以鱼。
2015-01-03 15:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
带调试信息,是把所有代码都保留着,哪怕它是没用的,这个时候就需要为这些东西开辟空间,只是为了给你看到而已,但在这种模式下得到的结论,并非程序在实际中的效果,所以是没用的。其实我写程序很少靠调试器的,原因也在这里。

授人以渔,不授人以鱼。
2015-01-03 15:16
快速回复:在编程学习过程中遇到的一些很低级的问题,请大侠赐教!
数据加载中...
 
   



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

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