Redian新闻
>
老哥使用的一项技术: extern定义全局变量
avatar
老哥使用的一项技术: extern定义全局变量# Programming - 葵花宝典
p*o
1
阿司匹林和维生素B12合在一起用,有报道说可以降低血栓的形成,防止脑中风,这个
有科学根据吗?只知道阿司匹林有防止血栓的作用,但是没听说和B12的联合作用,有
哪个高手来答一下疑。
avatar
c*t
2
why have to bundle with indian together? So unfair! Should it be case by
case,country by country?
avatar
g*e
3
钓鱼岛什么的,海区啊什么的,到底是怎么回事啊?
为什么中国和日本都认为那是自己的领海?
为什么起争端?
划海而治可能吗?
我死在哪里、什么时候都可以。但是想弄明白再去死行不?
avatar
A*a
4
黑客帝国里面的Matrix,又叫做母体,是一个虚拟世界,人在虚拟世界里面生活,把程
序信息当成是真实。
这个模型很有意思,我尝试用借用这个概念来说明大小乘对于涅槃和解脱的不同看法
原始佛法:
母体虽然具有真实性,但是母体是无常的,是苦的,所以要从母体出来,母体外的真实
世界才是解脱,也就是涅槃。
大乘佛法:
母体世界是梦,但是真实世界和母体是不二的,我不需要从这个母体当中出来,从母体
当中出来那个是自闭症,是自私的,是灰身灭智,当我开悟解脱后,我会知道母体就是
真实世界,真实世界就是母体,我任运自如
结果是:大乘仍然自欺的认为真实世界就在母体中,不需要从母体当中出来,于是一直
被困在母体里面,也就是被困在轮回里面,不断的玩着所谓度众的游戏
而原始佛法是强烈出离倾向的,是要从母体当中彻底摆出来,真正的真实世界。
而且解脱以后,是绝对不会再进入母体的,而大乘与此相反。
这个例子仅仅是要说明涅槃性质的不同,黑客帝国的母体和真实世界与我们的世界和涅槃还是有很多不同的
avatar
b*i
5
如何在多个文件中简单的定义一个全局变量呢?
这样:在main.h里面定义
#ifdef MAIN
#define extern
#endif
extern int timer_tick;
这样,main.c里面
#define MAIN
#include "main.h"
就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main
.c里面看到的没有extern.
avatar
f*o
6
Aspirin may deplete vitamin B12 and cause b12 deficiency
b12 is for supplementation only
avatar
t*n
7
when you reach the country limit, you have no choice.

【在 c*******t 的大作中提到】
: why have to bundle with indian together? So unfair! Should it be case by
: case,country by country?

avatar
m*s
8
"而其他的文件用main.h就自动用了extern int timer_tick;"
你这里的第一个“用”= #include?
我觉得“简单的定义一个全局变量”应该是只定义一次,不需要其他include,就已经
是全局了。

main

【在 b***i 的大作中提到】
: 如何在多个文件中简单的定义一个全局变量呢?
: 这样:在main.h里面定义
: #ifdef MAIN
: #define extern
: #endif
: extern int timer_tick;
: 这样,main.c里面
: #define MAIN
: #include "main.h"
: 就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main

avatar
l*h
9
there was a study in ~2004 saying aspirin users had a higher chance of low
B12 levels, but other studies cannot replicate the results.
there is also no known mechanism for aspirin to interfere with B12
metabolism.
aspirin is known to reduce absorption and increase excretion of vit C and
folic acid. but for the majority in a modern society, this has no impact
because of the much more than sufficient supply of vit C and folic acid in
food. for the vulnerable ones though, this can be a problem, sometimes big.
avatar
b*i
10
是的
全局变量应该在main里面定义,不用extern,在其他需要用全局变量的文件里面用
extern,这样很麻烦,所以直接#include "main.h"不就行了?

【在 m**s 的大作中提到】
: "而其他的文件用main.h就自动用了extern int timer_tick;"
: 你这里的第一个“用”= #include?
: 我觉得“简单的定义一个全局变量”应该是只定义一次,不需要其他include,就已经
: 是全局了。
:
: main

avatar
p*o
11
多谢,国内医生的说法可能是断章取义了,说是国外医学界认为阿司匹林和B12合用可
以降低血栓的形成。

【在 l*h 的大作中提到】
: there was a study in ~2004 saying aspirin users had a higher chance of low
: B12 levels, but other studies cannot replicate the results.
: there is also no known mechanism for aspirin to interfere with B12
: metabolism.
: aspirin is known to reduce absorption and increase excretion of vit C and
: folic acid. but for the majority in a modern society, this has no impact
: because of the much more than sufficient supply of vit C and folic acid in
: food. for the vulnerable ones though, this can be a problem, sometimes big.

avatar
d*o
12
这样子在main.c里岂不是没法用关键字extern原来的含义了
avatar
f*o
13
阿司匹林itself is anti-platelet, can reduce clot降低血栓的形成防止脑中风,这个
is true
for pts with atrial fibrillation, depend on risk factor, they can take
aspirin to prevent stroke
avatar
k*e
14
可以這樣
main.h:
#ifdef MAIN
#define EXTERN_W
#else
#define EXTERN_W extern
#endif
EXTERN_W int timer_tick;
main.c:
#define MAIN
#include "main.h"

【在 d*******o 的大作中提到】
: 这样子在main.c里岂不是没法用关键字extern原来的含义了
avatar
A*s
15
This is not true, Aspirin can not prevent stroke in A-fib.

这个

【在 f****o 的大作中提到】
: 阿司匹林itself is anti-platelet, can reduce clot降低血栓的形成防止脑中风,这个
: is true
: for pts with atrial fibrillation, depend on risk factor, they can take
: aspirin to prevent stroke

avatar
b*i
16
实在需要可以放在前面,后面#include "main.h"
一般main不直接使用其他文件的变量,而是反过来

【在 d*******o 的大作中提到】
: 这样子在main.c里岂不是没法用关键字extern原来的含义了
avatar
b*8
17
CHADS2 SCORE 1-2的都可以用aspirin prevents stroke.
avatar
a*l
18
那为什么不是你在main.h里面就定义extern int timer_tick,然后在实际操作timer_
tick的C文件里面定义int timer_tick呢?这样做不是更简单吗?

main

【在 b***i 的大作中提到】
: 如何在多个文件中简单的定义一个全局变量呢?
: 这样:在main.h里面定义
: #ifdef MAIN
: #define extern
: #endif
: extern int timer_tick;
: 这样,main.c里面
: #define MAIN
: #include "main.h"
: 就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main

avatar
l*s
19
because they are global variables.

【在 a****l 的大作中提到】
: 那为什么不是你在main.h里面就定义extern int timer_tick,然后在实际操作timer_
: tick的C文件里面定义int timer_tick呢?这样做不是更简单吗?
:
: main

avatar
a*l
20
我说的方法和楼主说的有任何区别吗?对于编译器来说是完全一样的。区别仅在于,我
是用实在的表达告诉用户变量的存在方式,楼主是用一种技巧让用户觉得变量神奇的存
在了。

【在 l*********s 的大作中提到】
: because they are global variables.
avatar
b*i
21
为什么你觉得你更简单?如果你有100个全局变量,经常修改类型,你要在多个文件中使
用就要经常修改。如果#include "main.h"一行就可以解决,这才是简单吧。
1 main.c
#define MAIN
#include "main.h"
2 main.h
用#ifdef MAIN来定义extern为空
然后定义所有extern int ...; extern char...
3 所有其他的文件如果要使用全局变量
#include "main.h"

【在 a****l 的大作中提到】
: 那为什么不是你在main.h里面就定义extern int timer_tick,然后在实际操作timer_
: tick的C文件里面定义int timer_tick呢?这样做不是更简单吗?
:
: main

avatar
d*a
22
还有更简单的办法: main.h按常规方法定。在main.c里,
#define extern
#include "main.h"
#undef extern
这样main.c的其它地方还可以正常地用extern。
但是,我个人不赞同用这样非常规的方法。

main

【在 b***i 的大作中提到】
: 如何在多个文件中简单的定义一个全局变量呢?
: 这样:在main.h里面定义
: #ifdef MAIN
: #define extern
: #endif
: extern int timer_tick;
: 这样,main.c里面
: #define MAIN
: #include "main.h"
: 就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main

avatar
d*a
23
一个用了100个全局变量的程序,得打回去重写! :)

【在 b***i 的大作中提到】
: 为什么你觉得你更简单?如果你有100个全局变量,经常修改类型,你要在多个文件中使
: 用就要经常修改。如果#include "main.h"一行就可以解决,这才是简单吧。
: 1 main.c
: #define MAIN
: #include "main.h"
: 2 main.h
: 用#ifdef MAIN来定义extern为空
: 然后定义所有extern int ...; extern char...
: 3 所有其他的文件如果要使用全局变量
: #include "main.h"

avatar
a*l
24
很简单很粗暴.

【在 d***a 的大作中提到】
: 还有更简单的办法: main.h按常规方法定。在main.c里,
: #define extern
: #include "main.h"
: #undef extern
: 这样main.c的其它地方还可以正常地用extern。
: 但是,我个人不赞同用这样非常规的方法。
:
: main

avatar
b*i
25
为啥不行?
我看很多项目都是这样,比如一个文件系统,里面全局的变量多了。

【在 d***a 的大作中提到】
: 一个用了100个全局变量的程序,得打回去重写! :)
avatar
f*n
26
既然是全局变量,为什么不把它们定义在一个叫Globals.h的文件里?就用你现在的方
法,但是不放在Main.h里,而是放在Globals.h里。文件名一目了然,也不会有Main.h
里不能用extern的问题。
avatar
b*i
27
可以的。意思其实一样,都是操纵extern,使得main.c里面不extern,其他任何使用这
些变量的都extern

h

【在 f******n 的大作中提到】
: 既然是全局变量,为什么不把它们定义在一个叫Globals.h的文件里?就用你现在的方
: 法,但是不放在Main.h里,而是放在Globals.h里。文件名一目了然,也不会有Main.h
: 里不能用extern的问题。

avatar
n*e
28
其实我没搞明白,我觉得在main里面要是不写那个extern不是更省更直观。。。

【在 b***i 的大作中提到】
: 可以的。意思其实一样,都是操纵extern,使得main.c里面不extern,其他任何使用这
: 些变量的都extern
:
: h

avatar
d*a
29
不会吧,我改过Linux内核呢。
少用或不用全局变量,这是基本的编程注意事项。适当用可以, 但一个文件里用100个
,太过了。
其实你说的方法有一个很大的问题,遇到变量初始化就无法应对了。
main.h:
external int table_size;
main.c:
int table_size = 1024; /* initial table size is 1024 */

【在 b***i 的大作中提到】
: 为啥不行?
: 我看很多项目都是这样,比如一个文件系统,里面全局的变量多了。

avatar
b*i
30
不是每个文件100个啊,是整个项目全部放到一个文件里面去而已

【在 d***a 的大作中提到】
: 不会吧,我改过Linux内核呢。
: 少用或不用全局变量,这是基本的编程注意事项。适当用可以, 但一个文件里用100个
: ,太过了。
: 其实你说的方法有一个很大的问题,遇到变量初始化就无法应对了。
: main.h:
: external int table_size;
: main.c:
: int table_size = 1024; /* initial table size is 1024 */

avatar
n*e
31
这样做会有global coupling的问题。你可能修改程序的某些模块的时候牵扯到很多别
的模块。。。

【在 b***i 的大作中提到】
: 不是每个文件100个啊,是整个项目全部放到一个文件里面去而已
avatar
k*s
32
这个真的不是个好的程序风格:人为的增加了程序阅读的复杂性。如果有code review
的话,过不了。老老实实的在main.c里声明int timer_tick;然后在main.h里声明
extern int timer_tick; 一目了然的事情。

main

【在 b***i 的大作中提到】
: 如何在多个文件中简单的定义一个全局变量呢?
: 这样:在main.h里面定义
: #ifdef MAIN
: #define extern
: #endif
: extern int timer_tick;
: 这样,main.c里面
: #define MAIN
: #include "main.h"
: 就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main

avatar
b*i
33
全局变量统一放在一个文件中才是好的设计。分散开来改起来才容易错。

review

【在 k**s 的大作中提到】
: 这个真的不是个好的程序风格:人为的增加了程序阅读的复杂性。如果有code review
: 的话,过不了。老老实实的在main.c里声明int timer_tick;然后在main.h里声明
: extern int timer_tick; 一目了然的事情。
:
: main

avatar
j*x
34
这好比在一条错误的道路上找到一条稍微不那么错误的道路。。。

【在 b***i 的大作中提到】
: 全局变量统一放在一个文件中才是好的设计。分散开来改起来才容易错。
:
: review

avatar
j*x
35
奇巧淫技。。。

main

【在 b***i 的大作中提到】
: 如何在多个文件中简单的定义一个全局变量呢?
: 这样:在main.h里面定义
: #ifdef MAIN
: #define extern
: #endif
: extern int timer_tick;
: 这样,main.c里面
: #define MAIN
: #include "main.h"
: 就定义了全局变量,而其他的文件用main.h就自动用了extern int timer_tick;而main

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。