MENU

C语言中struct和typedef struct的区别

首先你萌能看到这篇总结笔记要感谢我们其中一位小编,他发现了这个容易让人纠结的地方。

在C语言中定义一个结构体变量有下面两种方法,读者依据注释仔细观察两种定义方法带来的区别:

struct Student
{
    int a;
}stu1;
struct Student stu2;
//上面的Student是结构体名,stu1和stu2是声明的两个结构体变量
//注意有两种声明的方法
typedef struct Student
{
    int a;
}Stu;
Student stu1;
//上面的Student是结构体名,Stu是别名(注意不是变量),即 Stu == struct Student
//stu1是声明的一个结构体变量

 

 

 

时光很瘦,指缝太宽

 

[hermit auto="0" loop="0" unexpand="0" fullheight="0"]songlist#:1773975504[/hermit]

时间很瘦,

指缝太宽。

每一次的片片张张都挤得满满。

匆匆那年,记忆如筛,

可又能筛走哪一段青春。

 

曾记得你匆匆来过,

一起把酒深夜。

杯子踫在一起,

那是心碎的声音。

 

从此后天各一方,

不是思念也仍然思念。

其实,

我还会偶尔想起你,

想起你的信念,

想起你的眼睛,

惊讶其中那些浪漫……

 

你的身影,

风雪弥漫。

天高地阔,

岁月无恙。

谁说一次相逢印象太浅,

不似纪念也确是纪念。

谁说生命只有一种长度,

横向打量其实她很宽。

 

时间不瘦,

指缝很紧。

握得住的都是友情温暖。

记忆有筛,

筛出烂漫。

烂漫是那些美丽的画面!

世界好大,我怕你离开

风来雨落,秋来叶归。一场又一场花开花落,一场又一场无悔穿越。静静的走,默默的看,无论风雨,无论坎坷。 世界真的好大,好像一转身,就不知道谁要离开。

所以,珍惜还在身边的每一个人。你走,我不送你;你来,不论多大风多大雨,我都会去接你。 不为别的,只为留在记忆中的人也能时常陪伴左右,一起聊聊生活,谈谈梦想。

我们本在同一列车上,如果你真的要提前下车,请不要叫醒我,让我继续装睡,沉睡到终点,装作不知道你的离开。

 

Windows 下配置 Sublime Text 3 C语言开发环境

Sublime Text 是一款让人又爱又恨的代码编辑器,在小编看来,它是做是最棒的代码编辑器,没有之一,不过它却也有让人几近抓狂的固执,比如官方论坛给出了 Linux 下中文输入法的解决方法但就是不在正式版中修复,还比如 C 语言开发环境对新手来说并不是那么容易配置。

在你们另一个小编的危逼利诱下,小编“巴黎不下雨”终于屈服,查阅大量资料去整理出了一个完美的解决方法,今天在这里无偿分享出来,方便另一个小编下次出事来查看ヽ(*·ω·)ノ也方便喜欢 Sublime Text 的童鞋自己手动配置。

1.安装gcc编译器,

默认gcc由WinGW(Minimalist GNU on Windows)提供,是要联网安装的,速度会比较慢,你们勤劳的小编把它离线打包了下,直接下载后解压到 C 盘根目录就可以了

[box style="download"]下载链接: http://pan.baidu.com/s/1gderJof 密码: zvf4[/box]

2.配置系统环境变量

右键 计算机 -> 属性 -> 高级 -> 环境变量,点击“系统变量”栏中的Path,编辑,添加 ;C:\MinGW\bin 注意开头有个分号

修改环境变量对了,标点都是英文标点也要注意下哦,小编发现好多人在用搜狗输入法,注意切换成英文状态

3.配置 Sublime Text 3

选择Tool -> Build System -> New Build System

配置Sublime Text 3输入以下代码:

{  
    "cmd"        : ["gcc","${file}", "-o", "${file_path}/${file_base_name}"],  
    "file_regex" :"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",  
    "working_dir":"${file_path}",  
    "selector"   : "source.c",  
    "encoding"   : "cp936",  
  
    "variants"   :  
    [  
        {  
            "name"  : "Run",  
            "cmd"   : ["cmd","/c", "gcc", "${file}", "-o", "${file_path}/${file_base_name}","&&", "cmd", "/c","${file_path}/${file_base_name}"]  
        },  
        {  
            "name"  :"RunInCommand",  
            "cmd"   : ["cmd","/c", "gcc", "${file}", "-o","${file_path}/${file_base_name}", "&&","start", "cmd", "/c","${file_path}/${file_base_name} && pause"]  
        }  
    ]  
}

Ctrl+S 进行保存,默认保存的位置就是正确的(Sublime Text 3\Packages\User),文件名保存为 C.sublime-build

新建 Build System4.测试

先在 Tools -> Build System里面选择 C

快捷键:

Ctrl+B 是 Build

Ctrl+Shift+B 是 Run

5.补充,C++ 的配置

gcc虽然可以编译c++代码,但是不能进行c++的连接函数库操作。所以针对c++代码可以设置使用g++来编译。

方法和上面的一样,只要把配置文件中的gcc改为g++ ,source.c改为source.c++ ,保存文件名c.sublime-build改为c++.sublime-build就可以了。配置文件如下:

{
	"encoding": "utf-8",
	"working_dir": "$file_path",
	"shell_cmd": "g++ -Wall -std=c++0x $file_name -o $file_base_name && cmd /c ${file_path}/${file_base_name}",
	"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
	"selector": "source.c++",
 
	"variants": 
	[
		{	
		"name": "Run",
        	"shell_cmd": "g++ -Wall -std=c++0x $file -o $file_base_name && start cmd /c \"${file_path}/${file_base_name} & pause\""
		}
	]
}

6.进阶:关于 sublime.build

这个编译文件是JSON文件,遵循JSON的语法。JSON 数据的书写格式是:

“名称”: “值”   例如    “firstName” : “John”

支持的变量

只列举了用到的:

$file_path 当前文件所在目录路径, e.g., C:\Files.
$file 当前文件的详细路径, e.g., C:\Files\Chapter1.txt.
$file_name 文件全名(含扩展名), e.g., Chapter1.txt.
$file_extension 当前文件扩展名, e.g., txt.
$file_base_name 当前文件名(不包括扩展名), e.g., Document.

也可以使用花括号括起来

${project_name}

或者使用:设置默认值 这时候必须有花括号。

${project_name:Default}

 用到的名称:

working_dir:运行cmd是会先切换到working_dir指定的工作目录

cmd:包括命令及其参数。如果不指定绝对路径,外部程序会在你系统的:const:PATH 环境变量中搜索。

shell_cmd:相当于shell:true的cmd ,cmd可以通过shell运行。

file_regex:该选项用Perl的正则表达式来捕获构建系统的错误输出到sublime的窗口。

“selector”: “source.c” :在选定 Tools | Build System | Automatic 时根据这个自动选择编译系统。

variants 用来替代主构建系统的备选。例如Run命令。会显示在tool的命令中。

name: 只在variants下面有,设置命令的名称,例如Run 。

本篇文章部分资料来源于网络:

关于 sublime.build 的相关信息来自这里

如果还有明天,该怎么说再见

失去就好像,你将余生写成一首长诗,却不能提及一个和他有关的名字。这可怕的失去。

我什么也没忘,但是有些事只适合珍藏。

——史铁生

[mp3]http://bcs.duapp.com/mydin-net/%E9%BB%98.mp3[/mp3]

猛然发现,我以前对这句话的理解是有问题的:不要去寻找记忆中的人,人找到了,记忆就没了。就这样,珍藏了一段又一段记忆,失去了一个又一个人。

安静的夜,多希望有人留在身边。走到这里才发现,只留下我一个人。没有回头的机会,就试着忘记不再见面的人,只记下整个世界,可往往是忘记整个世界,只记得这些曾经陪伴过我的人。

我很幸运,在我认识到失去的时候,还有机会。记忆中的人,还能走出来陪陪我说说话。曾经的同学朋友,我还有理由去找他们聊聊天。

以后努力去做一个温暖的人,用真心对朋友微笑,用眼泪提醒自己要做的更好,用快乐去迎接每一天的阳光,用自信向世界宣称我过得很好,我有新的生活。至于那些过去的伤害,即使眼中下着雨,心中也要打起伞。

走在天际,看繁花满地;对酒当歌,兑诺言一生。你的路途,从此有我陪伴。褪尽风华,我依然在彼岸守护,岁月不再长长叹息。生生的两端,我愿彼此成岸。

如果还有明天,不必说再见!

 

Linux 中 Sublime Text 3 使用中文输入法

小编是个ST3重试依赖用户,已经达到了没有ST3就不想写代码的地步,可惜在 Linux 下 ST3 是不支持中文输入法的,这个问题在论坛上已经给出了解决方法,但是在升级中并没有修复。

目前只测试了 Ubuntu(包括衍生版)和 openSUSE,其他平台应该也能成功,如果有试用过的小伙伴欢迎来反馈。

1.安装依赖软件

sudo zypper install build-essential libgtk2.0-dev ##opensuse
sudo apt-get install build-essential libgtk2.0-dev ##ubuntu

2.新建一个空文件,保存以下代码

/*
 * sublime-imfix.c
 * Use LD_PRELOAD to interpose some function to fix sublime input method support for linux.
 * By Cjacker Huang <jianzhong.huang at i-soft.com.cn> *
 *
 * gcc -shared -o libsublime-imfix.so sublime_imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC
 * LD_PRELOAD=./libsublime-imfix.so sublime_text
 */
#include <gtk/gtk.h>
#include <gdk/gdkx.h>

typedef GdkSegment GdkRegionBox;

struct _GdkRegion
{
    long size;
    long numRects;
    GdkRegionBox *rects;
    GdkRegionBox extents;
};

GtkIMContext *local_context;

void
gdk_region_get_clipbox (const GdkRegion *region,
                      GdkRectangle    *rectangle)
{
    g_return_if_fail (region != NULL);
    g_return_if_fail (rectangle != NULL);

    rectangle->x = region->extents.x1;
    rectangle->y = region->extents.y1;
    rectangle->width = region->extents.x2 - region->extents.x1;
    rectangle->height = region->extents.y2 - region->extents.y1;
    GdkRectangle rect;
    rect.x = rectangle->x;
    rect.y = rectangle->y;
    rect.width = 0;
    rect.height = rectangle->height;

    //The caret width is 2;
    //Maybe sometimes we will make a mistake, but for most of the time, it should be the caret.
    if (rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) {
        gtk_im_context_set_cursor_location(local_context, rectangle);
    }
}

//this is needed, for example, if you input something in file dialog and return back the edit area
//context will lost, so here we set it again.

static GdkFilterReturn event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer im_context)
{
    XEvent *xev = (XEvent *)xevent;

    if (xev->type == KeyRelease && GTK_IS_IM_CONTEXT(im_context)) {
        GdkWindow *win = g_object_get_data(G_OBJECT(im_context), "window");

        if (GDK_IS_WINDOW(win)) {
            gtk_im_context_set_client_window(im_context, win);
        }
    }

    return GDK_FILTER_CONTINUE;
}

void gtk_im_context_set_client_window (GtkIMContext *context,
                                       GdkWindow    *window)
{
    GtkIMContextClass *klass;
    g_return_if_fail (GTK_IS_IM_CONTEXT (context));
    klass = GTK_IM_CONTEXT_GET_CLASS (context);

    if (klass->set_client_window) {
        klass->set_client_window (context, window);
    }

    if (!GDK_IS_WINDOW (window)) {
        return;
    }

    g_object_set_data(G_OBJECT(context), "window", window);
    int width = gdk_window_get_width(window);
    int height = gdk_window_get_height(window);

    if (width != 0 && height != 0) {
        gtk_im_context_focus_in(context);
        local_context = context;
    }
    
    gdk_window_add_filter (window, event_filter, context);
}

3.编译文件,打开终端进入你保存文件的位置,使用以下命令:

gcc -shared -o libsublime-imfix.so sublime-imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC

4.拷贝文件

sudo cp libsublime-imfix.so /usr/lib/

5.修改文件

sudo vim /usr/share/applications/sublime_text.desktop

找到其中的Exec=/opt/sublime_text/sublime_text %F,将其修改为:

Exec=bash -c 'LD_PRELOAD=/usr/lib/libsublime-imfix.so /opt/sublime_text/sublime_text' %F