在学校学的c语言,的确没有什么大用,等真正看到项目代码。只会为自己以前写的代码感到自卑。我自己也很垃圾!!许多疑问。
随便写几个吧。#ifdef ,#ifndef , #endif , #if defined , #elif , union enum,extern,static,我感到有点恐怖。你越怕的越是有用的
预编译项目中用到真多。要搞清楚。
//a.h 头文件
#ifndef A //可以换成a_h 或者 abc
#define A //可以换成a_h 或者 abc
int AorB(int a)
{ return a;} #endif
// b.h头文件
#include "a.h"
int CorD(int a)
{ return AorB(a);}
//first.c 主文件
#include "a.h"
#include "b.h"
int main()
{int a = 0;
int b = AorB(a);
int c = CorD(b);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0; }
在linux下 gcc -o first first.c
一开始#include<a.h> 到a.h头文件去了,遇到#ifndef A,满足条件,所以就把#ifndef A和#endif 之间的东西包含进来,也即定义了define A,A标志,和AorB();A标志相当于信号量。。没有定义我就定义信号量,同时拿完东西。
#include<b.h> 到b.h投文件中,又#include<a.h>,到 a.h中,遇到#ifndef A, 发现不满足条件。所以不执行#ifndef A和#endif 之间..也就是a.h只包含一次。到下的CorD()
如果不#ifndef A和#endif 之间则a.h被包含两次,出错。。error 这是为了防止头文件被重复包含。
#ifndef <标识>
#define <标识>
......
#endif
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
#if defined A 和#ifdef A 其实是一回事。。还有#if !defined A 和#ifndef A 只是#if defined 可以多个标识符。。例如:#if defined A || defined B 相当于
# ifdef A
..........
#ifdef B
.........
注意::||是或者逻辑运算 |位运算 或
#elif 很恐怖 我以前都没有见过。
#ifdef A
。。。。
#elif B
。。。。
#else
。。。。
相当与
if()
。。。。
else if()
。。。。
else。。。。
static 讲过了,,,隐藏的意思。。全局变量, 初始化。。0.。。
extern 引进外文件终端变量或者函数。。。
//a.c
#include "stdio.h"
void fun(void)
{printf("fun is here\n");}
//hello.c
extern void fun(void);
int main(int argc, char* argv[])
{printf("Hello World!\n");
printf("hello!!\n");
fun();
return 0;}
union 共用体类型。。
union data
{ int i;
char ch;
float f;}
union data a;
a.i=278;
a.ch='D';
a.f=5.789;
最后共用体变量中的值是5.789.
注意::共用体的不同结构体。某一个时刻只存共用体的一种数据值,。结构体所有的成分都存储。分配共用体的存储空间大小至少要存储最大数据所需的空间量。。。

union exx
{
int a,b;
struct {
int c,d;
}lpp;
} e={10}; //第一个格子里是10
枚举类型:
#include "stdio.h"
void main()
{ enum colorname{red,yellow,blue,white};
enum colorname color;
for(color=red;color<=white;color++)
switch(color)
{
case red: printf("red\n"); break;
case yellow: printf("yellow\n"); break;
case blue: printf("blue\n"); break;
case white: printf("white\n"); break;
}
}
tortoiseSVN客户端和visual SVN Server服务器
1.1 VisualSVN Server的安装
1.2 TortoiseSVN的安装
1.3 TotoiseSVN的基本使用方法 1.3.1 签入源代码到SVN服务器 假如我们使用Visual Studio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:




如上图所示,好了,源代码已经成功签入SVN服务器了。这时候团队成员就可以迁出SVN服务器上的源代码到自己的机器了。
1.3.2 签出源代码到本机

在上图中URL of Repository:下的文本框中输入svn server中的代码库的地址,其他默认,点击OK按钮,就开始签出源代码了。 这时候也会弹出对话框,要求输入用户名和密码,通过验证后即可浏览代码库中的内容。 搞定!源代码已经成功签出到刚才新建的StartKit目录中。 打开StartKit目录,可以看到如下图的文件夹结构: 
一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件:

我们已经知道怎么将源代码签入到SVN服务器,怎么从服务器签出代码到本机,也简单了解了不同状态所对应的图案啦。
1.3.3 提交修改过的文件到SVN服务器 上面的图2-2-7中,我修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服务器。 注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。 在Model文件夹上点击右键或在Model文件下的空白处点击右键,点击SVN Commit…弹出下面的窗体: 
点击OK按钮后,弹出如下图的窗体:图2-2-10 
|