设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
全局变量?好象不全局呀?没想明白到底是怎么回事 ...
返回列表
查看:
964
|
回复:
3
全局变量?好象不全局呀?没想明白到底是怎么回事
[复制链接]
mikkoyue
mikkoyue
当前离线
积分
385
IP卡
狗仔卡
发表于 2007-8-16 10:56:34
|
显示全部楼层
|
阅读模式
头文件定义了一个全局变量
/*
head.h
*/
#ifndef _m_HEAD_H
#define _m_HEAD_H
static int flag = 0;
#endif
复制代码
信号处理头文件
/*
ctest.h
*/
#define _m_CTEST_H
#ifdef __cplusplus
extern "C" {
#endif
void signal_init();
void signal_action(int);
#ifdef __cplusplus
}
#endif
#endif
复制代码
信号处理源文件
/*
ctest.c
*/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include "ctest.h"
#include "head.h"
extern int flag;
void signal_init()
{
signal(17, signal_action);
}
void signal_action(int i)
{
printf("b: %d\n", flag);
printf("action\n");
flag = 10;
sleep(10);
printf("b2: %d\n", flag);
}
复制代码
主程序
/*
main.cpp
*/
#include "head.h"
#include "ctest.h"
#include <iostream>
#include <unistd.h>
extern int flag;
int main()
{
signal_init();
flag = 1;
while(flag > 0)
{
std::cout << "flag: " << flag << std::endl;
sleep(5);
}
return 0;
}
复制代码
编译
cc -c ctest.c -o ctest.o
c++ -c main.cpp -o main.o
c++ main.o ctest.o -o main
复制代码
root@yxm:~/c++/test# ./main &
[1] 2657
flag: 1
root@yxm:~/c++/test# ps
PID TTY TIME CMD
2264 pts/6 00:00:00 bash
2657 pts/6 00:00:00 main
2658 pts/6 00:00:00 ps
root@yxm:~/c++/test# flag: 1
flag: 1
flag: 1
kill -17 2657
root@yxm:~/c++/test# b: 0 [color="DarkOrchid"]注:怪异处一[/color]
action
b2: 10
flag: 1 [color="DarkOrchid"]注:怪异处二[/color]
flag: 1
kill -17 2657
root@yxm:~/c++/test# b: 10 [color="DarkOrchid"]注:怪异处三[/color]
action
b2: 10
flag: 1
flag: 1
复制代码
全局变量怎么在每个函数里有自己的值?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
herberteuler
herberteuler
当前离线
积分
1620
IP卡
狗仔卡
发表于 2007-8-16 15:13:02
|
显示全部楼层
因为你把变量的定义写在了头文件中,这样 ctest.c 和 main.cpp 里都有一行 static int flag = 0; 这个 flag 就在两个文件中都有了。
回复
支持
反对
使用道具
举报
显身卡
zhllg
zhllg
当前离线
积分
8505
IP卡
狗仔卡
发表于 2007-8-16 15:22:26
|
显示全部楼层
全局的static只在每个compilation unit里可见
所以你这样定义的话,每个包含此头文件的.c里都有一个独立的flag
头文件里只有声明就好了,不要放定义
只把flag定义在一个.c里,且不要加static
回复
支持
反对
使用道具
举报
显身卡
manphiz
manphiz
当前离线
积分
1153
IP卡
狗仔卡
发表于 2007-8-16 16:47:38
|
显示全部楼层
建议楼主看看 static/extern 的含义。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表