?? linux 下 c 語言編程1.html
字號:
<hr width="90%"><b>注意:</b> 在你的系統上安裝 <tt>calls</tt> , 以超級用戶身份登錄后執行下面的步驟:
1. 解壓和 <tt>untar</tt> 文件. 2. <tt>cd</tt> 進入 <tt>calls</tt> untar
后建立的子目錄. 3. 把名叫 <tt>calls</tt> 的文件移動到 <tt>/usr/bin</tt>
目錄. 4. 把名叫 <tt>calls.1</tt> 的文件移動到目錄 <tt>/usr/man/man1</tt>
. 5. 刪除 <tt>/tmp/calls</tt> 目錄. 這些步驟將把 <tt>calls</tt> 程序和它的指南頁安裝載你的系統上.
<hr width="90%"></dd>
</dl>
當 <tt>calls</tt> 打印出調用跟蹤結果時, 它在函數后面用中括號給出了函數所在文件的文件名:
<pre><font color="#0066ff">main [test.c]</font></pre>
如果函數并不是向 <tt>calls</tt> 給出的文件里的,
<tt>calls </tt>不知道所調用的函數來自哪里, 則只顯示函數的名字:
<pre><font color="#0066ff">printf</font></pre>
<tt> calls</tt> 不對遞歸和靜態函數輸出. 遞歸函數顯示成下面的樣子:
<pre><font color="#0066ff">fact <<< recursive in factorial.c >>></font></pre>
靜態函數象這樣顯示:
<pre><font color="#0066ff">total [static in calculate.c]</font></pre>
作為一個例子, 假設用 <tt>calls</tt> 處理下面的程序:
<br>
<pre><font color="#0066ff">#include <stdio.h>
main ()
{
char my_string[] = "hello there";
my_print (my_string);
my_print2(my_string);
}
my_print (char *string)
{
printf ("The string is %s\n", string);
}
my_print2 (char *string)
{
char *string2;
int size, size2, i;
size = strlen (string);
size2 = size -1;
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size2 - i] = string[i];
string2[size] = `\0';
printf ("The string printed backward is %s\n", string2);
}</font></pre>
將產生如下的輸出:
<pre><font color="#0066ff"> 1 main [test.c]
2 my_print [test.c]
3 printf
4 my_print2 [test.c]
5 strlen
6 malloc
7 printf</font></pre>
<tt>calls</tt> 有很多命令行選項來設置不同的輸出格式, 有關這些選項的更多信息請參考
<tt>calls</tt> 的指南頁. 方法是在命令行上鍵入 <tt>calls -h</tt> .
<br>
<br>
<h4>
<font color="#ff9900">
cproto</font></h4>
<tt> cproto</tt> 讀入 C 源程序文件并自動為每個函數產生原型申明.
用 <tt>cproto</tt> 可以在寫程序時為你節省大量用來定義函數原型的時間.
<br> 如果你讓 <tt>cproto</tt> 處理下面的代碼:
<pre><font color="#0066ff">#include <stdio.h>
main ()
{
char my_string[] = "hello there";
my_print (my_string);
my_print2(my_string);
}
my_print (char *string)
{
printf ("The string is %s\n", *string);
}
my_print2 (char *string)
{
char *string2;
int size, size2, i;
size = strlen (string);
size2 = size -1;
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size2 - i] = string[i];
string2[size] = `\0';
printf ("The string printed backward is %s\n", string2);
}</font></pre>
你將得到下面的輸出:
<pre><font color="#0066ff">/* test.c */
int main(void);
int my_print(char *string);
int my_print2(char *string);</font></pre>
這個輸出可以重定向到一個定義函數原型的包含文件里.
<h4>
<font color="#ff9900">
indent</font></h4>
<tt> indent</tt> 實用程序是 Linux 里包含的另一個編程實用工具.
這個工具簡單的說就為你的代碼產生美觀的縮進的格式. <tt>indent</tt> 也有很多選項來指定如何格式化你的源代碼.這些選項的更多信息請看<tt>indent</tt>
的指南頁, 在命令行上鍵入 <tt>indent -h</tt> .
<br>
<p> 下面的例子是 <tt>indent </tt>的缺省輸出:
</p><p> 運行 <tt>indent </tt>以前的 C 代碼:
</p><pre><font color="#0066ff">#include <stdio.h>
main () {
char my_string[] = "hello there";
my_print (my_string);
my_print2(my_string); }
my_print (char *string)
{
printf ("The string is %s\n", *string);
}
my_print2 (char *string) {
char *string2;
int size, size2, i;
size = strlen (string);
size2 = size -1;
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size2 - i] = string[i];
string2[size] = `\0';
printf ("The string printed backward is %s\n", string2);
}</font></pre>
運行 <tt>indent </tt>后的 C 代碼:
<pre><font color="#0066ff">#include <stdio.h>
main ()
{
char my_string[] = "hello there";
my_print (my_string);
my_print2 (my_string);
}
my_print (char *string)
{
printf ("The string is %s\n", *string);
}
my_print2 (char *string)
{
char *string2;
int size, size2, i;
size = strlen (string);
size2 = size -1;
string2 = (char *) malloc (size + 1);
for (i = 0; i < size; i++)
string2[size2 - i] = string[i];
string2[size] = `\0';
printf ("The string printed backward is %s\n", string2);
}</font></pre>
<tt> </tt> <tt>indent </tt>并不改變代碼的實質內容,
而只是改變代碼的外觀. 使它變得更可讀, 這永遠是一件好事.
<h4>
gprof</h4>
<tt> gprof</tt> 是安裝在你的 Linux 系統的 <tt>/usr/bin</tt>
目錄下的一個程序. 它使你能剖析你的程序從而知道程序的哪一個部分在執行時最費時間.
<p><tt> gprof</tt> 將告訴你程序里每個函數被調用的次數和每個函數執行時所占時間的百分比.
你如果想提高你的程序性能的話這些信息非常有用.
</p><p> 為了在你的程序上使用 gprof, 你必須在編譯程序時加上
-pg 選項. 這將使程序在每次執行時產生一個叫 gmon.out 的文件. gprof 用這個文件產生剖析信息.
</p><p> 在你運行了你的程序并產生了 gmon.out 文件后你能用下面的命令獲得剖析信息:
</p><pre><font color="#0066ff">gprof <program_name></font></pre>
參數 program_name 是產生 gmon.out 文件的程序的名字.
<dl>
<dd>
<hr width="90%"><b>技巧:</b> gprof 產生的剖析數據很大, 如果你想檢查這些數據的話最好把輸出重定向到一個文件里.
<hr width="90%"></dd>
</dl>
<h4>
f2c 和 p2c</h4>
<tt> f2c</tt> 和 <tt>p2c </tt>是兩個源代碼轉換程序. f2c
把 FORTRAN 代碼轉換為 C 代碼, p2c 把 Pascal 代碼轉換為 C 代碼. 當你安裝
GCC 時這兩個程序都會被安裝上去.
<p> 如果你有一些用 FORTRAN 或 Pascal 寫的代碼要用 C 重寫的話,
f2c 和 p2c 對你非常有用. 這兩個程序產生的 C 代碼一般不用修改就直接能被
GCC 編譯.
</p><p> 如果要轉換的 FORTRAN 或 Pascal 程序比較小的話可以直接使用
f2c 或 p2c 不用加任何選項. 如果要轉換的程序比較龐大, 包含很多文件的話你可能要用到一些命令行選項.
</p><p> 在一個 FORTRAN 程序上使用 f2c , 輸入下面的命令:
</p><pre><font color="#0066ff">f2c my_fortranprog.f</font></pre>
<dl>
<dd>
<hr><b>注意:</b> <tt>f2c</tt> 要求被轉換的程序的擴展名為 <tt>.f</tt> 或
a <tt>.F</tt> .
<hr></dd>
</dl>
要把一個Pascal 程序裝換為 C 程序, 輸入下面的命令:
<pre><font color="#0066ff">p2c my_pascalprogram.pas</font></pre>
這兩個程序產生的 C 源代碼的文件名都和原來的文件名相同,
但擴展名由 .f 或 .pas 變為 .c.
<br>
<p>
</p><p align="center"></p>
<p> </p></center></td>
</tr>
</tbody></table>
</center>
</div>
</body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -