這部分內(nèi)容會隨著時間逐漸的積累,很多東西只要很用心,沒有辦不到的。
archlinux下安裝firefox如下:
$ sudo pacman -S firefox flashplugin gecko-mediaplayer
gecko-mediaplayer is More stable combined with MPlayer 1.0RC2, A good replacement of the now aging mplayer-plugin.
設(shè)置1. urlclassifier3.sqlite
urlclassifier3.sqlite文件用于記錄Firefox從Google抓取的反釣魚網(wǎng)站和惡意站點數(shù)據(jù)的,但是這個文件大小在默認(rèn)情況下
會不斷地增長,會導(dǎo)致firefox啟動響應(yīng)很慢。
通過設(shè)置"urlclassifier.updatecachemax"可以限制urlclassifier3.sqlite的大小.
Linux版本下"urlclassifier.updatecachemax"默認(rèn)為104857600 (100 MB)。
在地址欄輸入about:config,出現(xiàn)一個警告,點擊同意后進行高級設(shè)置。在過濾器中輸入上面字串,改它的值為20971520(20m)。刪除urlclassifier3.sqlite重新啟動Firefox就可以了。
擴展列表:
1. Vimperator
Make firefox behave like vim.
2. Adblock Plus
Ads were yesterday!
3. CacheView
Allows searching and sorting cache files.
4. Download Statusbar
View and manage downloads from a tidy statusbar.
5. DownloadHelper
Download videos and images from many sites.
6. Fission
Safari style progress bar in the address bar.
7. ColorfulTabs
Colors every tab in a different color.
8. Better Gmail 2
Enhances Gmail.
9. Gmail notifier
A notifier for Gmail accounts.
10. Better GCal
Enhances Google Calendar.
posted @
2009-05-23 20:59 xuejzt 閱讀(399) |
評論 (0) |
編輯 收藏
vimperator是firefox下面的一款插件,它可以將你的firefox變成vim,就感覺你在用vim。效果特別好。強烈推薦~~
nomal模式下輸入:help就可以查看vimperator幫助
小結(jié)如下:
1. esc,當(dāng)快捷鍵無效時候大部分是因為切換到了命令模式,esc返回正常模式;
2. tab,善用tab補全;
3. o/t,當(dāng)前/新標(biāo)簽打開頁面;
4. Shift+h/l,后退/前進,一般來說后退用的比較多;
5. u,undo,撤銷關(guān)閉的標(biāo)簽;
6. d,關(guān)閉當(dāng)前頁面;
7. r/R,刷新/強制刷新當(dāng)前頁面;
8. /,當(dāng)前頁面查找,回車后n標(biāo)記下一個關(guān)鍵字,N標(biāo)記上一個關(guān)鍵字;
9. y/Y,復(fù)制當(dāng)前標(biāo)簽頁url/復(fù)制選中的文字;
10. gg/gG,跳轉(zhuǎn)到頁面頂端/底端;
11. p/P,粘帖并打開當(dāng)前剪貼板里的url地址,小寫當(dāng)前標(biāo)簽打開,大寫新標(biāo)簽打開;
12. gf,查看頁面源代碼;
13. f,進入QuickHint modo,用的不多;
14. :pref,或者 :pr 加tab補全,打開Fx opinion對話框;
15. :addons,擴展列表,同樣可以tab補全;
16. :restart,重啟Fx;
posted @
2009-05-23 20:13 xuejzt 閱讀(392) |
評論 (0) |
編輯 收藏
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1 == str2) << endl;
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
return 0;
}
分別輸出false,false,true。str1和str2都是字符數(shù)組,每個都有其自己的存儲區(qū),它們的值則是各存儲區(qū)首地址,不等;str3和
str4同上,只是按const語義,它們所指向的數(shù)據(jù)區(qū)不能修改。str5和str6并非數(shù)組而是字符指針,并不分配存儲區(qū),其后的“abc”以常量形
式存于靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的指針,相等
boolalpha 用符號形式表示真假。
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什么?
return 0;
}
...
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 輸出 false, 因為 float 的 1 和 int 的 1 在內(nèi)存里的表示不一樣。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 輸出 true
// 輸出 true, 因為 float 的 0 和 int 的 0 在內(nèi)存里的表示是一樣的。
(int &)a 就表示 不管 a 是什么,我都當(dāng)他是一個int變量。
從機器碼的角度來說,變量a會被翻譯成一個內(nèi)存地址,(int &)a 就是說,這個內(nèi)存地址里的內(nèi)容它是一個整數(shù)。
(int)a 呢不同:如果 a 不是整數(shù),就會按規(guī)則轉(zhuǎn)換成整數(shù),存入另一個地址(或臨時變量)中去。
浮點數(shù)的 1.0f 在內(nèi)存里是這樣表示的:
0011 1111 1000 0000 00000000 00000000
這個32位二進制數(shù)被當(dāng)作整數(shù)輸出就是:
1065353216
而整數(shù)的 1 在內(nèi)存里是這樣表示的:
0000 0000 0000 0000 00000000 00000001
所以 (int)a != (int&)a
浮點的0和整數(shù)的0 在內(nèi)存里都是:
0000 0000 0000 0000 00000000 00000000
所以 (int)b == (int&)b
posted @
2008-10-08 14:56 xuejzt 閱讀(482) |
評論 (0) |
編輯 收藏
emacs里面undo有兩種快捷方式:
1. C-x u
2. C-/
我喜歡用第二種方式,因為用起來很方便,而且因為這種方式,讓我想到了用“C-;”來表示redo.因為“'”就在“/”的旁邊,當(dāng)
小指放在"\"上時無名指可以很輕松地放在";"上面。
redo的調(diào)用方式:
(require 'redo)
(global-set-key [(control \;)] 'redo)
posted @
2008-10-04 14:36 xuejzt 閱讀(407) |
評論 (0) |
編輯 收藏
linux系統(tǒng)有很多守護進程,大多數(shù)服務(wù)器都是用守護進程實現(xiàn)的。守護進程是生存期長的一種進程。它們獨立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。
他們常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止。你也可以自己來啟動它們。archlinux下所有的服務(wù)器守護進程都放在/etc/rc.d文件夾下面。如果安裝了mysql,就會在這個
文件夾里有一個名為mysqld的守護進程。要啟動它,采用:
$ sudo /etc/rc.d/mysqld start
之后就可以登錄mysql對里面的數(shù)據(jù)進行操作了。如果沒有開啟這個守護進程,嘗試連接mysql數(shù)據(jù)庫就會提示:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
一下是使用mysql數(shù)據(jù)庫常用的一些命令總結(jié):
1:查看都有哪些數(shù)據(jù)庫
mysql> SHOW DATABASES;
2:創(chuàng)建MYSQLDATA數(shù)據(jù)庫
mysql> CREATE DATABASE MYSQLDATA;
3:選中MYSQLDATA數(shù)據(jù)庫
mysql> USE MYSQLDATA; (按回車鍵出現(xiàn)Database changed 時說明操作成功!)
4:查看當(dāng)前數(shù)據(jù)庫中TABLE
mysql> SHOW TABLES;
5:創(chuàng)建一個TABLE
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表結(jié)構(gòu)
mysql> DESCRIBE MYTABLE;
7:插入數(shù)據(jù)
mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫表中
mysql> LOAD DATA LOCAL INFILE "/home/test/music.txt" INTO TABLE MYTABLE;
9:導(dǎo)入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數(shù)據(jù)
mysql>update MYTABLE set sex="f" where name='hyq';
MySql的用戶管理是通過 User表來實現(xiàn)的,添加新用戶常用的方法有兩個,一是在User表插入相應(yīng)的數(shù)據(jù)行,同時設(shè)置相應(yīng)的權(quán)限;二是通過GRANT命令創(chuàng)建具有某種權(quán)限的用戶。其中GRANT的常用用法如下:
grant all on mydb.* to NewUserName@HostName identified by "password" ;
grant usage on *.* to NewUserName@HostName identified by "password";
grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";
grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password";
若要給此用戶賦予他在相應(yīng)對象上的權(quán)限的管理能力,可在GRANT后面添加WITH GRANT OPTION選項。而對于用插入User表添加的用戶,Password字段應(yīng)用PASSWORD 函數(shù)進行更新加密,以防不軌之人竊看密碼。對于那些已經(jīng)不用的用戶應(yīng)給予清除,權(quán)限過界的用戶應(yīng)及時回收權(quán)限,回收權(quán)限可以通過更新User表相應(yīng)字段,也可以使用REVOKE操作。
下面給出本人從其它資料(www.cn-java.com)獲得的對常用權(quán)限的解釋:
全局管理權(quán)限:
FILE: 在MySQL服務(wù)器上讀寫文件。
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程。
RELOAD: 重載訪問控制表,刷新日志等。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。
數(shù)據(jù)庫/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限:
ALTER: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引。
CREATE: 建立新的數(shù)據(jù)庫或數(shù)據(jù)表。
DELETE: 刪除表的記錄。
DROP: 刪除數(shù)據(jù)表或數(shù)據(jù)庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的權(quán)限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄--其它什么也不允許做。
posted @
2009-05-23 21:21 xuejzt 閱讀(283) |
評論 (0) |
編輯 收藏
1 #include <mysql.h>/*注意要包含這個頭文件*/
2 #include <string.h>
3 #include <stdlib.h>
4 #include <stdio.h>
5
6 /*定義了一些數(shù)據(jù)庫連接需要的宏*/
7 #define HOST "localhost"
8 #define USERNAME "ABitNo"
9 #define PASSWORD "ABitNo"
10 #define DATABASE "abitno"
11
12 /*這個函數(shù)用來執(zhí)行傳入的sql語句*/
13 void exe_sql(char* sql) {
14
15 MYSQL my_connection; /*這是一個數(shù)據(jù)庫連接*/
16 int res; /*執(zhí)行sql語句后的返回標(biāo)志*/
17
18 /*初始化mysql連接my_connection*/
19 mysql_init(&my_connection);
20
21 /*這里就是用了mysql.h里的一個函數(shù),用我們之前定義的那些宏建立mysql連接,并
22 返回一個值,返回不為空證明連接是成功的*/
23 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
24 0, NULL, CLIENT_FOUND_ROWS)) {/*連接成功*/
25
26 printf("數(shù)據(jù)庫執(zhí)行exe_sql連接成功!\n");
27
28 /*這句話是設(shè)置查詢編碼為utf8,這樣支持中文*/
29 mysql_query(&my_connection, "set names utf8");
30
31 /*下面這句話就是用mysql_query函數(shù)來執(zhí)行我們剛剛傳入的sql語句,
32 這會返回一個int值,如果為0,證明語句執(zhí)行成功*/
33 res = mysql_query(&my_connection, sql);
34
35 if (res) {/*現(xiàn)在就代表執(zhí)行失敗了*/
36 printf("Error: mysql_query !\n");
37 /*不要忘了關(guān)閉連接*/
38 mysql_close(&my_connection);
39 } else {/*現(xiàn)在就代表執(zhí)行成功了*/
40 /*mysql_affected_rows會返回執(zhí)行sql后影響的行數(shù)*/
41 printf("%d 行受到影響!\n\n", mysql_affected_rows(&my_connection));
42 /*不要忘了關(guān)閉連接*/
43 mysql_close(&my_connection);
44 }
45
46 } else {
47 /*數(shù)據(jù)庫連接失敗*/
48 printf("數(shù)據(jù)庫執(zhí)行exe_sql連接失敗!\n");
49 }
50 }
51
52 /*這個函數(shù)用來執(zhí)行傳入的sql語句,并打印出查詢結(jié)果*/
53 void query_sql(char* sql) {
54 MYSQL my_connection; /*這是一個數(shù)據(jù)庫連接*/
55 int res; /*執(zhí)行sql語句后的返回標(biāo)志*/
56 MYSQL_RES *res_ptr; /*指向查詢結(jié)果的指針*/
57 MYSQL_FIELD *field; /*字段結(jié)構(gòu)指針*/
58 MYSQL_ROW result_row; /*按行返回的查詢信息*/
59
60 int row, column; /*查詢返回的行數(shù)和列數(shù)*/
61 int i, j; /*只是控制循環(huán)的兩個變量*/
62
63 /*初始化mysql連接my_connection*/
64 mysql_init(&my_connection);
65
66 /*這里就是用了mysql.h里的一個函數(shù),用我們之前定義的那些宏建立mysql連接,并
67 返回一個值,返回不為空證明連接是成功的*/
68 if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE,
69 0, NULL, CLIENT_FOUND_ROWS)) {/*Connection success*/
70
71 printf("數(shù)據(jù)庫查詢query_sql連接成功!\n");
72
73 /*這句話是設(shè)置查詢編碼為utf8,這樣支持中文*/
74 mysql_query(&my_connection, "set names utf8");
75
76 /*下面這句話就是用mysql_query函數(shù)來執(zhí)行我們剛剛傳入的sql語句,
77 這會返回一個int值,如果為0,證明語句執(zhí)行成功*/
78 res = mysql_query(&my_connection, sql);
79
80 if (res) { /*現(xiàn)在就代表執(zhí)行失敗了*/
81 printf("Error: mysql_query !\n");
82 /*不要忘了關(guān)閉連接*/
83 mysql_close(&my_connection);
84 } else { /*現(xiàn)在就代表執(zhí)行成功了*/
85 /*將查詢的結(jié)果給res_ptr*/
86 res_ptr = mysql_store_result(&my_connection);
87
88 /*如果結(jié)果不為空,就把結(jié)果print*/
89 if (res_ptr) {
90 /*取得結(jié)果的行數(shù)和*/
91 column = mysql_num_fields(res_ptr);
92 row = mysql_num_rows(res_ptr) + 1;
93 printf("查詢到 %lu 行 \n", row);
94
95 /*輸出結(jié)果的字段名*/
96 for (i = 0; field = mysql_fetch_field(res_ptr); i++)
97 printf("%s\t", field->name);
98 printf("\n");
99
100 /*按行輸出結(jié)果*/
101 for (i = 1; i < row; i++) {
102 result_row = mysql_fetch_row(res_ptr);
103 for (j = 0; j < column; j++)
104 printf("%s\t", result_row[j]);
105 printf("\n");
106 }
107
108 }
109
110 /*不要忘了關(guān)閉連接*/
111 mysql_close(&my_connection);
112 }
113 }
114 }
115
116 int main(int argc, char *argv[]) {
117 /*測試下向里面插入數(shù)據(jù)*/
118 char *exe = "insert into abitno values('ABitNo','http://ABitNo.LinPie.com');";
119 exe_sql(exe);
120
121 /*測試下查詢*/
122 char *query = "select * from abitno;";
123 query_sql(query);
124
125 return 0;
126 }
轉(zhuǎn)載自:
http://abitno.linpie.com/linux-c-connect-mysql.html
posted @
2009-05-23 21:05 xuejzt 閱讀(4617) |
評論 (1) |
編輯 收藏
這部分內(nèi)容會隨著時間逐漸的積累,很多東西只要很用心,沒有辦不到的。
archlinux下安裝firefox如下:
$ sudo pacman -S firefox flashplugin gecko-mediaplayer
gecko-mediaplayer is More stable combined with MPlayer 1.0RC2, A good replacement of the now aging mplayer-plugin.
設(shè)置1. urlclassifier3.sqlite
urlclassifier3.sqlite文件用于記錄Firefox從Google抓取的反釣魚網(wǎng)站和惡意站點數(shù)據(jù)的,但是這個文件大小在默認(rèn)情況下
會不斷地增長,會導(dǎo)致firefox啟動響應(yīng)很慢。
通過設(shè)置"urlclassifier.updatecachemax"可以限制urlclassifier3.sqlite的大小.
Linux版本下"urlclassifier.updatecachemax"默認(rèn)為104857600 (100 MB)。
在地址欄輸入about:config,出現(xiàn)一個警告,點擊同意后進行高級設(shè)置。在過濾器中輸入上面字串,改它的值為20971520(20m)。刪除urlclassifier3.sqlite重新啟動Firefox就可以了。
擴展列表:
1. Vimperator
Make firefox behave like vim.
2. Adblock Plus
Ads were yesterday!
3. CacheView
Allows searching and sorting cache files.
4. Download Statusbar
View and manage downloads from a tidy statusbar.
5. DownloadHelper
Download videos and images from many sites.
6. Fission
Safari style progress bar in the address bar.
7. ColorfulTabs
Colors every tab in a different color.
8. Better Gmail 2
Enhances Gmail.
9. Gmail notifier
A notifier for Gmail accounts.
10. Better GCal
Enhances Google Calendar.
posted @
2009-05-23 20:59 xuejzt 閱讀(399) |
評論 (0) |
編輯 收藏
vimperator是firefox下面的一款插件,它可以將你的firefox變成vim,就感覺你在用vim。效果特別好。強烈推薦~~
nomal模式下輸入:help就可以查看vimperator幫助
小結(jié)如下:
1. esc,當(dāng)快捷鍵無效時候大部分是因為切換到了命令模式,esc返回正常模式;
2. tab,善用tab補全;
3. o/t,當(dāng)前/新標(biāo)簽打開頁面;
4. Shift+h/l,后退/前進,一般來說后退用的比較多;
5. u,undo,撤銷關(guān)閉的標(biāo)簽;
6. d,關(guān)閉當(dāng)前頁面;
7. r/R,刷新/強制刷新當(dāng)前頁面;
8. /,當(dāng)前頁面查找,回車后n標(biāo)記下一個關(guān)鍵字,N標(biāo)記上一個關(guān)鍵字;
9. y/Y,復(fù)制當(dāng)前標(biāo)簽頁url/復(fù)制選中的文字;
10. gg/gG,跳轉(zhuǎn)到頁面頂端/底端;
11. p/P,粘帖并打開當(dāng)前剪貼板里的url地址,小寫當(dāng)前標(biāo)簽打開,大寫新標(biāo)簽打開;
12. gf,查看頁面源代碼;
13. f,進入QuickHint modo,用的不多;
14. :pref,或者 :pr 加tab補全,打開Fx opinion對話框;
15. :addons,擴展列表,同樣可以tab補全;
16. :restart,重啟Fx;
posted @
2009-05-23 20:13 xuejzt 閱讀(392) |
評論 (0) |
編輯 收藏
已經(jīng)大概有半年沒有登錄我的這個博客了,不是因為我懶,只是自己一直在徘徊。我一直在尋找一個可以讓我長久的留下來寫博客的地方,現(xiàn)在我回來了!!我現(xiàn)在有兩個博客,一個我想用來記錄我自己的生活,情感,感悟,以及對人生的一些看法及認(rèn)識,起名為“我就在這里”,現(xiàn)在我把這個地方選在了微軟的windows live里
xuej's blog. 另外一個就是這個地方,我要用來記錄我在技術(shù)學(xué)習(xí)中的一些體會,還有一些總結(jié),以及看書的筆記。我很喜歡這個博客,沒有多少廣告,界面干凈整潔,代碼可以高亮顯示,常用的工具都列在了工具欄里很方便使用。
馬上要論文答辯了,論文寫作還有個關(guān)鍵的環(huán)節(jié)就完成了,等答辯結(jié)束了,我就會回來。
posted @
2009-05-22 13:19 xuejzt 閱讀(229) |
評論 (0) |
編輯 收藏
class Empty
{
public:
Empty(); // 缺省構(gòu)造函數(shù)
Empty( const Empty& ); // 拷貝構(gòu)造函數(shù)
~Empty(); // 析構(gòu)函數(shù)
Empty& operator=( const Empty& ); // 賦值運算符
Empty* operator&(); // 取址運算符
const Empty* operator&() const; // 取址運算符 const
};
posted @
2008-10-08 15:14 xuejzt 閱讀(1441) |
評論 (0) |
編輯 收藏
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1 == str2) << endl;
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
return 0;
}
分別輸出false,false,true。str1和str2都是字符數(shù)組,每個都有其自己的存儲區(qū),它們的值則是各存儲區(qū)首地址,不等;str3和
str4同上,只是按const語義,它們所指向的數(shù)據(jù)區(qū)不能修改。str5和str6并非數(shù)組而是字符指針,并不分配存儲區(qū),其后的“abc”以常量形
式存于靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的指針,相等
boolalpha 用符號形式表示真假。
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什么?
return 0;
}
...
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 輸出 false, 因為 float 的 1 和 int 的 1 在內(nèi)存里的表示不一樣。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 輸出 true
// 輸出 true, 因為 float 的 0 和 int 的 0 在內(nèi)存里的表示是一樣的。
(int &)a 就表示 不管 a 是什么,我都當(dāng)他是一個int變量。
從機器碼的角度來說,變量a會被翻譯成一個內(nèi)存地址,(int &)a 就是說,這個內(nèi)存地址里的內(nèi)容它是一個整數(shù)。
(int)a 呢不同:如果 a 不是整數(shù),就會按規(guī)則轉(zhuǎn)換成整數(shù),存入另一個地址(或臨時變量)中去。
浮點數(shù)的 1.0f 在內(nèi)存里是這樣表示的:
0011 1111 1000 0000 00000000 00000000
這個32位二進制數(shù)被當(dāng)作整數(shù)輸出就是:
1065353216
而整數(shù)的 1 在內(nèi)存里是這樣表示的:
0000 0000 0000 0000 00000000 00000001
所以 (int)a != (int&)a
浮點的0和整數(shù)的0 在內(nèi)存里都是:
0000 0000 0000 0000 00000000 00000000
所以 (int)b == (int&)b
posted @
2008-10-08 14:56 xuejzt 閱讀(482) |
評論 (0) |
編輯 收藏
簡介
對于瀏覽源代碼來說,在 Emacs 里面也有很多工具可用,比如自帶的 etags 就
不錯,不過功能不如 Cscope 強大。 Cscope 并不像 etags 那樣屬于 Emacs ,
它是一個獨立的程序。它是一個具有完全 Unix 血統(tǒng)的程序,用于幫助開發(fā)人員
瀏覽源代碼。它最初(那還是 PDP-11 的時代)是由 Bell 實驗室開發(fā),并且多年
以來一直是 AT&T Unix 商業(yè)發(fā)行版的一部分。它已經(jīng)被用于管理超過兩千萬行代
碼的工程。在2000年4月,多虧了 Santa Cruz Operation, Inc. (SCO) ,
Cscope 的源代碼在 BSD license 下開放了源代碼。
Cscope 的發(fā)行包里面有個 xcscope.el 能很好地用于 (X)Emacs 。它處于源代
碼包的 contrib/xcscope 目錄下。該目錄下面還有一個名為 cscope-indexer
的腳本文件,用于處理源代碼并不是在一個文件夾下面的情況。
安裝和配置
首先到 Cscope 的主頁 上去下載最新的源代碼包,編譯安裝。要在 Emacs 里面
使用,首先必須把 xcscope.el 拷貝到 load-path 里面包含的目錄里面。并在
~/.emacs
里面加上 (require 'xcscope)
就可以了,或者,如果你希望在打開
c 或者 c++ 文件的時候才加載 xcsope ,可以寫:
(add-hook 'c-mode-common-hook
'(lambda ()
(require 'xcscope)))
如果源代碼全部處于同一個目錄下面,現(xiàn)在就可以使用了。否則,如果源代碼有
多層目錄,或者其他地方還有附加的源代碼,則需要 cscope-indexer 腳本。把
那個腳本拷貝到系統(tǒng) PATH 里面去(如 /usr/bin/
)。如果所有的源代碼以及子目
錄都是在同一個目錄下面的,只要執(zhí)行 C-c s I(cscope-index-files)
就可以
生成 Cscope 的數(shù)據(jù)庫,接下來就可以使用了。
使用簡介
默認(rèn)是的快捷鍵都是綁定到 C-c s
的前綴上面,如果嫌麻煩的話可以自己更改
快捷鍵綁定。這是默認(rèn)的用于查找的鍵綁定:
C-c s s Find symbol.
C-c s d Find global definition.
C-c s g Find global definition (alternate binding).
C-c s G Find global definition without prompting.
C-c s c Find functions calling a function.
C-c s C Find called functions (list functions called
from a function).
C-c s t Find text string.
C-c s e Find egrep pattern.
C-c s f Find a file.
C-c s i Find files #including a file.
下面是在搜索到的結(jié)果之間切換用的快捷鍵:
C-c s b Display *cscope* buffer.
C-c s B Auto display *cscope* buffer toggle.
C-c s n Next symbol.
C-c s N Next file.
C-c s p Previous symbol.
C-c s P Previous file.
C-c s u Pop mark.
更詳細(xì)的使用說明請參見 xcscope.el 文件頭部的注釋。
轉(zhuǎn)載:http://pluskid.lifegoo.com/wiki/EmacsCscope.html
posted @
2008-10-04 16:37 xuejzt 閱讀(865) |
評論 (0) |
編輯 收藏
摘要: 正則表達式(regular expression)就是用一個“字符串”來描述一個特征,然后去驗證另一個“字符串”是否符合這個特征。比如表達式“ab+” 描述的特征是“一個 'a' 和 任意個 'b' ”,那么 'ab', 'abb', 'abbbbbbbbbb' 都符合這個特征。
閱讀全文
posted @
2008-10-04 15:45 xuejzt 閱讀(306) |
評論 (0) |
編輯 收藏
/**
* Accelerated C++ 筆記
**/
每一個標(biāo)準(zhǔn)容器,例如向量,都定義了兩種相關(guān)的迭代器類型:
container-type::const_iterator
container-type::iterator
這里container-type是諸如vector<Student_info>這樣的容器類型。
如果我們想用一個迭代起來修改存儲在容器中的值,就使用iterator類型;如果我們僅僅需要讀操作,那么就使用const_iterator類型。
//索引方式
for(vector<Student_info>::size_type i = 0; i != students.end(); ++i)
cout << students[i].name << endl;
//迭代器
for(vector<Student_info>::const_iterator iter = students.begin(); iter != students.end(); ++iter){
cout << (*iter).name << endl;
//或者 cout << iter->name << endl;
}
//用迭代器代替索引:效率可能不高
vector<Student_info> extract_fails(vector<Student_info>& students)
{
vector<Student_info> fail;
vector<Student_info>::iterator iter = students.begin();
while(iter != students.end()){
if(fgrade(*iter)){
fail.push_back(*iter);
iter = students.erase(iter);
}
else
++iter;
}
return fail;
}
posted @
2008-10-04 15:13 xuejzt 閱讀(653) |
評論 (0) |
編輯 收藏