| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1839 人关注过本帖
标题:在编程学习过程中遇到的一些很低级的问题,请大侠赐教!
只看楼主 加入收藏
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
再问一个问题哈
在main函数中声明static变量是不是没有意义?

Only the Code Tells the Truth             K.I.S.S
2015-01-03 13:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用longwu9t在2015-1-3 13:52:07的发言:

再问一个问题哈
在main函数中声明static变量是不是没有意义?

有的。但它与本模块全局静态变量等效,在别的模块的函数中,不能访问这个数据。

授人以渔,不授人以鱼。
2015-01-03 13:59
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
main函数中的static变量有哪些功能是main函数内的局部变量不能替代的?

Only the Code Tells the Truth             K.I.S.S
2015-01-03 14:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用longwu9t在2015-1-3 14:02:35的发言:

main函数中的static变量有哪些功能是main函数内的局部变量不能替代的?

可以自动初始化咯。

授人以渔,不授人以鱼。
2015-01-03 14:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
源代码:
程序代码:
#include <stdio.h>
#include <stdlib.h>

void test(void)
{
    int x;
    x = 1;
    printf_s("%d\n", x);
}

int main(void)
{
    test();
    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

PUBLIC    ??_C@_03PMGGPEJJ@?$CFd?6?$AA@            ; `string'
EXTRN    __imp__printf_s:PROC
EXTRN    @__security_check_cookie@4:PROC
;    COMDAT ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
CONST    SEGMENT
??_C@_03PMGGPEJJ@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
CONST    ENDS
PUBLIC    _main
PUBLIC    ?test@@YAXXZ                    ; test
; Function compile flags: /Ogtp
; File f:\projects\visual studio 2012\projects\test\test11\test11.cpp
;    COMDAT ?test@@YAXXZ
_TEXT    SEGMENT
?test@@YAXXZ PROC                    ; test, COMDAT

; 6    :     int x;
; 7    :     x = 1;
; 8    :     printf_s("%d\n", x);

    push    1
    push    OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
    call    DWORD PTR __imp__printf_s
    add    esp, 8

; 9    : }

    ret    0
?test@@YAXXZ ENDP                    ; test
_TEXT    ENDS
; Function compile flags: /Ogtp
; File f:\projects\visual studio 2012\projects\test\test11\test11.cpp
;    COMDAT _main
_TEXT    SEGMENT
_main    PROC                        ; COMDAT

; 8    :     printf_s("%d\n", x);

    push    1
    push    OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
    call    DWORD PTR __imp__printf_s
    add    esp, 8

; 13   :     test();
; 14   :     return EXIT_SUCCESS;

    xor    eax, eax

; 15   : }

    ret    0
_main    ENDP
_TEXT    ENDS
END



授人以渔,不授人以鱼。
2015-01-03 14:12
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 24楼 TonyDeng
唉 static这个单词 和写个=0真不知道哪个方便
总觉着main函数跟其它函数不同,没有必要用static变量

Only the Code Tells the Truth             K.I.S.S
2015-01-03 14:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
25楼的代码写成这样的下面的结果:

程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int x;
    x = 1;
    printf_s("%d\n", 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

PUBLIC    ??_C@_03PMGGPEJJ@?$CFd?6?$AA@            ; `string'
EXTRN    __imp__printf_s:PROC
EXTRN    @__security_check_cookie@4:PROC
;    COMDAT ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
CONST    SEGMENT
??_C@_03PMGGPEJJ@?$CFd?6?$AA@ DB '%d', 0aH, 00H        ; `string'
CONST    ENDS
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    :     x = 1;
; 8    :     printf_s("%d\n", x);

    push    1
    push    OFFSET ??_C@_03PMGGPEJJ@?$CFd?6?$AA@
    call    DWORD PTR __imp__printf_s
    add    esp, 8

; 9    :     return EXIT_SUCCESS;

    xor    eax, eax

; 10   : }

    ret    0
_main    ENDP
_TEXT    ENDS
END


授人以渔,不授人以鱼。
2015-01-03 14:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
再改27楼的代码是这样:

程序代码:
#include <stdio.h>
#include <stdlib.h>

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 14:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用longwu9t在2015-1-3 14:13:01的发言:

唉 static这个单词 和写个=0真不知道哪个方便
总觉着main函数跟其它函数不同,没有必要用static变量


代码不是写在main()中的!

授人以渔,不授人以鱼。
2015-01-03 14:16
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 29楼 TonyDeng
你的意思我明白 是说static变量定义在main之外

我说的是main函数内的有没有必要定义static变量

Only the Code Tells the Truth             K.I.S.S
2015-01-03 14:18
快速回复:在编程学习过程中遇到的一些很低级的问题,请大侠赐教!
数据加载中...
 
   



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

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