免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jack9981
打印 上一主题 下一主题

[C] 如何定义全局变量 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-09-03 07:11 |只看该作者
回复 7# zhaohongjian000
你说的特性跟你楼下说的是同一件事情,即强定义,弱定义的区别
实际项目中遇到的问题,意义就是要这样做才能解决问题。
   

论坛徽章:
0
12 [报告]
发表于 2014-09-03 07:14 |只看该作者
回复 8# dooqaqa
可以编译通过,但是 局限性太大了,代码移到其他平台可能就出问题了, 提高编译器的优化级别也可能影响准确性

   

论坛徽章:
0
13 [报告]
发表于 2014-09-03 07:20 |只看该作者
sxcong 发表于 2014-09-02 14:02
"限制g只能在a.h中定义 "
学习C语言的目的何在? 限定算法最快是有意义的
但限定变量在.h定义......

目的在于解决问题, 坑爹的问题都是在实际项目中才会遇到。 c标准库中还有这种代码呢:
#define stdin stdin
也是为了解决问题。

论坛徽章:
0
14 [报告]
发表于 2014-09-03 07:23 |只看该作者
hanxin83 发表于 2014-09-02 14:51
原来是脑袋急转弯类的题目, 改一下... ...

这个不是脑袋转弯弯, 你的解决方法也不符合要求, a1.c中include a.h 在第二行。

论坛徽章:
0
15 [报告]
发表于 2014-09-03 08:54 |只看该作者
回复 13# jack9981


#define stdin stdin

这是有意义的,因为很多地方可能需要判断
#ifdef stdin

如果没有#define stdin stdin,上述就是false。

类似非常多,常用于函数,数据类型,比如以变态的windows各种变量为例:


#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif

#ifndef IN
#define IN
#endif

#ifndef OUT
#define OUT
#endif

#ifndef OPTIONAL
#define OPTIONAL
#endif

#undef far
#undef near
#undef pascal

论坛徽章:
0
16 [报告]
发表于 2014-09-03 09:01 |只看该作者
而全局变量不一样,变量只能定义一次。不管是.h还是.c,都有可能被#include。在两处被#include,定义变量就多执行了两次。
所以现在一般编程都不用全局变量,而是通过接口函数访问,比如setXXX, getXXX。 变量只限定在有限范围内,不影响其他模块。
也不是说一定要接正常方式用,C语言有很多小窍门,但用在正式的开发项目中就要注意了,比如每年都有模糊C语言,代码毫无疑问都是正确的,但在正式项目里,有谁会这么写?

论坛徽章:
0
17 [报告]
发表于 2014-09-03 09:03 |只看该作者
顺便贴一个:
#include <stdio.h>
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
}'+}##(!!/")
:t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
:0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

要说有用,我感觉研究这个,都比研究在.h里定义变量有用。

论坛徽章:
0
18 [报告]
发表于 2014-09-03 10:16 |只看该作者
sxcong 发表于 2014-09-03 09:01
而全局变量不一样,变量只能定义一次。不管是.h还是.c,都有可能被#include。在两处被#include,定义变量就 ...

obsfuscation code 并不都是为了花俏, 也是有实际需求的,商业化的产品也有。项目多了,就什么代码都有。
不讨论这个了,回到原问题上。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP