程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> linux下的C語言開發,linuxC語言開發

linux下的C語言開發,linuxC語言開發

編輯:關於C語言

linux下的C語言開發,linuxC語言開發


 在很多人的眼裡,C語言和linux常常是分不開的。這其中的原因很多,其中最重要的一部分我認為是linux本身就是C語言的傑出作品。當然,linux操作系統本身對C語言的支持也是相當到位的。作為一個真正的程序員來說,如果沒有在linux下面用C語言編寫過完整的程序,那麼只能說他對C語言本身的理解還相關膚淺,對系統本身的認識也不夠到位。作為程序員來說,linux系統為我們提供了很多理想的環境,這其中包括了下面幾個方面,
    
    (1)完善的編譯環境,包括gcc、as、ld等編譯、鏈接工具
    (2)強大的調試環境,主要是gdb工具
    (3)豐富的自動編譯工具,主要是make工具
    (4)多樣化的os選擇,ubuntu、redflag等等
    (5)浩瀚的開源代碼庫

    當然,不管我怎麼說,最終朋友們還是應該自己勇敢地跨出前進的第一步。如果還沒有過Linux編程經驗的朋友可以首先在自己的pc上面安裝一個虛擬機,然後就可以在shell下面編寫自己的C語言代碼了。http://hovertree.com/menu/c/

#include <stdio.h>  
  
int main()  
{  
    printf("hello!\n");  
    return 1;  
}    /* 何問起 hovertree.com */

編寫完上面的代碼後,你需要做的就是兩個步驟:1、輸入 gcc hello.c -o hello;2、輸入./hello。如果一切正常的話,此時你應該會在屏幕上看到一行hello的打印。如果你看到了,那麼恭喜你,你已經可以開始linux的c語言編程之旅了。

    當然,我們不會滿足於這麼簡單的打印功能。下面就可以編寫一個簡單的迭代函數,

#include <stdio.h>  
  
int iterate(int value)  
{  
    if(1 == value)  
        return 1;  
    return iterate(value - 1) + value;  
}  
  
int main()  
{  
    printf("%d\n", iterate(10));  
    return 1;      
}  /* 何問起 hovertree.com */

    此時,同樣我們需要重復上面的步驟:1、輸入gcc hello.c -o hello;2、輸入./hello。當然此時如果一切OK的話,你就會看到屏幕會有55這個數的輸出。本來1到10的數據之和就是55, 這說明我們的程序是正確的。

    當然, 還會有一些朋友對程序的反匯編感興趣,那麼他需要兩個步驟:1、gcc hello.c -g -o hello;2、objdump -S -d ./hello。之所以在gcc編譯的時候加上-g是為了添加調試信息,objdump中的-S選項是為了在顯示匯編代碼的時候同時顯示原來的C語言源代碼。

int iterate(int value)  
{  
 8048374:       55                      push   %ebp  
 8048375:       89 e5                   mov    %esp,%ebp  
 8048377:       83 ec 08                sub    $0x8,%esp  
    if(1 == value)  
 804837a:       83 7d 08 01             cmpl   $0x1,0x8(%ebp)  
 804837e:       75 09                   jne    8048389 <iterate+0x15>  
        return 1;  
 8048380:       c7 45 fc 01 00 00 00    movl   $0x1,0xfffffffc(%ebp)  
 8048387:       eb 16                   jmp    804839f <iterate+0x2b>  
    return iterate(value -1) + value;  
 8048389:       8b 45 08                mov    0x8(%ebp),%eax  
 804838c:       83 e8 01                sub    $0x1,%eax  
 804838f:       89 04 24                mov    %eax,(%esp)  
 8048392:       e8 dd ff ff ff          call   8048374 <iterate>  
 8048397:       8b 55 08                mov    0x8(%ebp),%edx  
 804839a:       01 c2                   add    %eax,%edx  
 804839c:       89 55 fc                mov    %edx,0xfffffffc(%ebp)  
 804839f:       8b 45 fc                mov    0xfffffffc(%ebp),%eax  
}  
 80483a2:       c9                      leave  
 80483a3:       c3                      ret  

推薦:http://www.cnblogs.com/roucheng/p/cbianyi.html

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved