硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4107|回复: 6
收起左侧

[其它] static的另一种用法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107077
QQ
发表于 2014-6-3 16:38:23 | 显示全部楼层 |阅读模式
     以前对static的认识不够深,今天发现可以在两个不同的文件中通过static声明相同的变量名,
而且可以在不同的文件中建立相同的函数名。
     在不同的文件中声明相同的函数名用处比较大,特别是在emWin多界面的设计中,比如我们
通常是用GUIBulder或者uCGUIBulder设计界面的,创建多个界面的时候,函数名基本都是一样
的,放在不同的文件中会有冲突,这时将相应的函数前面加上static即可。
    不过有一点要特别的注意,函数前面加上static之后,这个函数是不能在其它文件中调用的。

回复

使用道具 举报

3

主题

96

回帖

105

积分

初级会员

积分
105
发表于 2014-6-3 23:06:30 | 显示全部楼层
[s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151] [s:151]
回复

使用道具 举报

45

主题

45

回帖

45

积分

初级会员

积分
45
发表于 2017-8-18 15:55:59 | 显示全部楼层
static函数在其它文件中不能调用
如:static WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont);这样的函数要怎样修改让其它文件也能调用_MESSAGEBOX_Create函数
回复

使用道具 举报

45

主题

45

回帖

45

积分

初级会员

积分
45
发表于 2017-8-18 15:57:13 | 显示全部楼层
static函数在其它文件中不能调用
如:static WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont);这样的函数要怎样修改让其它文件也能调用_MESSAGEBOX_Create函数
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2017-8-18 16:05:19 | 显示全部楼层
首先WM_HWIN _MESSAGEBOX_Create不能用static修饰,因为static限定变量、函数在本文件范围内。
方法1
在头文件中声明:
WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont);
然后在*.c/cpp文件中#include这个头文件。
方法2
在使用WM_HWIN _MESSAGEBOX_Create函数的c/cpp文件前面加
extern WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont);
回复

使用道具 举报

45

主题

45

回帖

45

积分

初级会员

积分
45
发表于 2017-8-18 16:16:07 | 显示全部楼层

回 novice 的帖子

novice:首先WM_HWIN _MESSAGEBOX_Create不能用static修饰,因为static限定变量、函数在本文件范围内。
方法1
在头文件中声明:
WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont);
然后在*.c/cpp文件中#include这个头文件。
....... (2017-08-18 16:05) 
static WM_HWIN _MESSAGEBOX_Create(const char * sMessage, const char * sCaption, const GUI_FONT * pFont) {
    WM_HWIN  hWin;
    WM_HWIN  hItem;
    GUI_RECT Rect;
    hWin = MESSAGEBOX_Create(sMessage, sCaption, 0);
    FRAMEWIN_SetFont(hWin, pFont);
    WM_GetWindowRectEx(hWin, &Rect);
    FRAMEWIN_SetTextAlign(hWin, GUI_TA_HCENTER);
    WM_SetWindowPos(hWin,
        59, 62,
        195, 125);
    hItem = WM_GetDialogItem(hWin, GUI_ID_TEXT0);
    TEXT_SetFont(hItem, pFont);
    WM_SetWindowPos(hItem,
        65, 88,
        195, 125);
    hItem = WM_GetDialogItem(hWin, GUI_ID_OK);
    WM_SetWindowPos(hItem, 114,
        156,
        80,
        20);
//    return hWin;
}
函数在本文件范围内是正常,要是使用方法1,2  都是报错的
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2017-8-18 17:22:14 | 显示全部楼层
"static WM_HWIN _MESSAGEBOX_Create"
使用了"static",这样怎么能够让别的文件看见“_MESSAGEBOX_Create”?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 00:04 , Processed in 0.227349 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表