易截截图软件、单文件、免安装、纯绿色、仅160KB

C/C++中重复定义的问题


用#include可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或
函数a,我只要直接在源文件中包含#include<xxx.h>
(xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个问题一直也是似是而非的困扰着我许多年了,今天上网狠狠查了一下总算小有
所获了:
头文件
首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编
译时在#include的地方展开一下,没别的意义了,其实头文件主要是给别人看的。
我做过一个实验,将头文件的后缀改成xxx.txt,然后在引用该头文件的地方用
#include"xxx.txt"
编译,链接都很顺利的过去了,由此可知,头文件仅仅为阅读代码作用,没其他的作用
了!
不管是C还是C++,你把你的函数,变量或者结构体,类啥的放在你的.c或者.cpp文件里。然后编译成
lib,dll,obj,.o等等,然后别人用的时候 最基本的gcc hisfile.cpp yourfile.o|obj|dll|lib 等等。

对于我们程序员而言,他们怎么知道你的lib,dll...里面到底有什么东西?要看你的头文件。你的头文件就是对用户的说明。函数,参数,各种各样的接
口的说明。
   
那既然是说明,那么头文件里面放的自
然就是关于函数,变量,类的“声明
”了。记着,是“声明”,
不是“定义”。
那么,我假设大家知道声明和定义的
区别。所以,最好不要傻嘻嘻的在头文件里定义什么东西。比如全局变量:
/*xx头文件*/
#ifndef _XX_头文件.H
#define _XX_头文件.H
int A;
#endif
那么,很糟糕的是,这里的int
A是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定义
显然语法上错了。只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一
次,不过也许还是会岔子,但若多个c文件包含这个头文件时还是会出错的,因为宏名有效范围仅限于本c源文件,所以在这多个c文件编译时是不会出错的,但在
链接时就会报错,说你多处定义了同一个变量,
Linking...
incl2.obj : error
LNK2005: "int glb" (?glb@@3HA
) already
defined in incl1.obj
Debug/incl.exe : fatal error LNK1169: one
or more multiply defined symbols found
注意!!!
extern
这个关键字
真的比较可恶,在声明的时候,这个extern居然可以被省略,所以会让你搞不清楚到底是声明还是定义,下面分变量和


相关文档:

ACM c函数大全

函数名: abs 功  能: 求整数的绝对值
用  法: int abs(int i);
程序例:
#include <stdio.h>
#include <math.h>
int main(void)
{
  int number = -1234;
  printf("number: %d  absolute value: %d\n", number, abs(number));
  return 0;
}
函数名: atof
功  ......

C/C++位操作

C/C++位操作
一、传统的C方式位操作:
1.基本操作:
  使用一个unsigned int变量来作为位容器。
2.操作符:
|  按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
&  按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时 ......

symbian Open C and Open C++ 相关

nokia wiki:http://developer.symbian.org/wiki/index.php/Open_C_and_Open_C%2B%2B_Technical_Overview/zh-hans
symbian上开发openc时需要注意的问题
http://blog.csdn.net/sizhiguo/archive/2009/05/21/4206138.aspx
第一:如printf、sprint、文件操作、socket操作等,模拟器屏幕都会出现白屏等待,并且是一直下去。 ......

PRO*C编程中出现的错误

安装完Oracle后,使用PRO*C编译.pc文件,出现以下错误
proc: error while loading shared libraries: libclntsh.so.11.1:
cannot open shared object file: No such file or directory
解决方法:
在/etc/profile中添加
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib;
export LD_LIBRARY_PATH
然后可以 ......

"extern C", 你真的懂了吗?

       在c++ prime书中看到过,在DLL和lib中看到过,但是每次看过就不求甚解地一扫而过。心里知道有extern c这个语句,却不知道该用在哪里,又能起到什么作用。唉,想想自己也算是写过不少CODE的人了,可这种眼高手低的毛病却从没改变过。今天突然想起extern这个关键字,遂决定不能再这么浪 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号