iOS開發入門 ☞ C語言系列一

来源:http://www.cnblogs.com/bossren/archive/2017/01/26/6351763.html
-Advertisement-
Play Games

前言 什麼是操作系統:操作系統是一種系統軟體,用來管理電腦的軟硬體資源。 主流操作系統: 移動攜帶型設備:Android、iOS、Windows Phone、Symbian(塞班)、Black Berry(黑莓) OS PC個人電腦:Windows、Mac OS、Unix、Linux 什麼是iOS ...


前言

  •  什麼是操作系統:操作系統是一種系統軟體,用來管理電腦的軟硬體資源。
  •  主流操作系統:

    移動攜帶型設備:Android、iOS、Windows Phone、Symbian(塞班)、Black Berry(黑莓) OS

    PC個人電腦:Windows、Mac OS、Unix、Linux

  •  什麼是iOS:iOS是一款由蘋果公司開發的移動操作系統(iOS運行在移動攜帶型設備上)
  •  什麼是iOS開發:就是開發運行在iOS系統上的應用或游戲軟體,如:QQ、淘寶、憤怒的小鳥等。
  •  Mac OS文件系統:對文件進行管理的系統叫文件系統

  UNIX常用命令:

    查看命令的詳細幫助: man 命令名       (比如要看看 ls 命令的詳細用法,執行 man ls)

    pwd  (print work directory):列印當前目錄(工作目錄)     目錄 == 文件夾

    cd   (change directory)

    cd /   進入根目錄

    cd Users   進入用戶目錄

    cd tarena  進入用戶的主目錄(Home Directory)

    ls (list) :列出當前目錄下的所有內容

      ls -a  //-a 即all,列出目錄下的所有文件(包括以.開頭的隱含文件)

      ls -l  //-l 列舉文件的詳細信息(文件名、許可權、所有者、文件大小等)

    mkdir  創建目錄(文件夾)

    touch  創建文件

    who  顯示當前用戶名

    clear 清屏

    touch xxx.m  新建xxx.m文件

    open xxx.m   打開xxx.m文件

    在根目錄下使用ls列出所有內容:

      Applications  放所有的應用程式

      Library           應用程式需要的其庫等內容

      Network        網路相關

      System          系統相關

      Users            用戶的目錄

  常用目錄或路徑:

    主目錄(Home Directory):一個用戶有一個自己的主目錄,用戶在此目錄下擁有很高的許可權。

    /   根目錄(Root Directory):只有一個,代表整個硬碟

    特殊路徑:   /  根路徑        ./  當前路徑        ../  上一級路徑

    Desktop          桌面

    Documents      文稿

    Downloads      下載

    Library            其他

    Movies            影片

    Music              音樂

    Pictures           圖片

    Public             公共目錄

 註意:按一下tab鍵,可以自動補齊指令名稱、文件夾、文件夾名等。

C語言的特點

  • 豐富的運算符
  • 豐富的數據類型
  • 可以直接操作硬體
  • 高效的目標代碼
  • 可移植性好

C語言的用途

  • 編寫系統軟體、圖形處理、單片機程式、嵌入式系統開發甚至是用於科研
  • 編寫游戲外掛
  • 編寫android程式
  • 編寫iOS程式

C語言的編譯器

  1. gcc  GNU Compiler Collection(GNU編譯器套件),GNU組織開發的開源免費的編譯器。

    ( gcc 原名為 GNU C Compiler,只能處理C語言,後來GCC很快地擴展,也可以處理C++、Objective-C、Java等其它語言)

  1. clang  開源的BSD協議的基於LLVM的編譯器;蘋果公司自己的編譯器。

    (LLVM可以作為多種語言編譯器的後臺來使用,前端用clang)

C語言的版本問題

  1. 1983年美國國家標準局(American National Standards Institute,簡稱ANSI)成立了一個委員會,開始制定C語言標準的工作
  2. 1989年C語言標準被批准,這個版本的C語言標準通常被稱為ANSI C
  3. 1999年,國際標準化組織ISO又對C語言標準進行修訂,在基本保留原C語言特征的基礎上,針對應該的需要,增加了一些功能,命名為C99
  4. 2011年12月8日,ISO正式公佈C語言新的國際標準草案:C11

C語言的官方標準

  1. ANSI C / C89標準:1989年,美國國家標準協會(ANSI)發佈了第一個官方標準(簡稱 C89標準 或 ANSI C)。
  2. C99標準:1999年,國際標準化組織(ISO)和國際電工委員會(IEC)發佈了C語言的新標準。
  3. C11標準:2011年12月8日,國際標準化組織(ISO)和國際電工委員會(IEC)再次發佈了C語言的新標準。

C語言程式的運行過程

一、編譯:編譯是由編譯器來執行的,主要做的時語法檢查工作;將C源程式翻譯成電腦能識別的0和1。

  • 使用什麼編譯器:Xcode3使用GCC,Xcode4使用LLVM編譯器(前端用clang)
  • 如何使用clang編譯器編譯程式:
    • 在終端中輸入:cc  –c  文件名.c
    • 編譯成功,會生成.o目標文件
  • 編譯器的錯誤和警告功能
    • 如果代碼有語法問題,編譯器會直接報錯。並指出錯誤的個數和具體行號。
    • 只要有1個錯誤,程式就不能編譯成功,也不會生成.o文件
    • 警告信息只是編譯器的一些建議,並不影響編譯通過

二、鏈接:將自己編譯好的.o目標文件和C程式庫函數組合在一起,生成可執行文件。

    由鏈接器完成,clang編譯器裡面已經包含了鏈接指令

  • 在終端中輸入:cc  文件名.o
  • 鏈接成功,會生成a.out可執行文件

三、運行:兩種運行方式:

  • 直接雙擊打開a.out文件
  • 終端中使用 ./a.out 指令

  修改文件內容之後,一定要重新編譯、鏈接,再運行。

  其他clang指令:

  • 修改可執行文件a.out的名稱:cc  xxx.o  -o 新文件名
  • 一起編譯、鏈接:cc  xxx.c

  

  整個程式的運行過程:編寫源程式==>預處理==>編譯器==>連接器==>可執行

  註意:gcc可換為clang(CC); gcc -E test.c 查看編譯前文件內容 (-E的意思是:做預處理)

  1. 預處理:gcc -E test.c -o test.i (預處理的結果可以用-o的方式保存到一個文件test.i中)
  2. 編譯:gcc -c test.i  //編譯成功,會生成.o目標文件; 1,2可以合併:gcc -c test.c
  3. 連接:gcc test.o
  4. 執行:./a.out
  •  簡寫:gcc test.c  (1,2,3的合併)
  •  執行:./a.out

用Xcode創建項目

  

  • Product Name:產品名稱
  • Organization Name:公司名稱
  • Company Identifier :公司唯一標識,一般為公司官網網址的倒序
  • Bundle Identifier:產品唯一標識
  • TypeLanguage):項目語言類型

 

  C語言程式是由函數構成的,C程式的入口是main函數。函數內部代碼的執行順序,是從上到下執行的,如瀑布一樣。

  錯誤類型:

  • 語法錯誤:編譯器會直接報錯
  • 邏輯錯誤:沒有語法錯誤,只不過運行結果不正確

關鍵字

  C語言程式是由英文單詞構成的,其中有些單詞被C語言賦予了特殊含義,那麼這些單詞就是關鍵字。

  C語言的系統保留字(32個關鍵字)

  1. 基本數據類型(5個):void、int、float、double、char
    • void:聲明函數無返回值或無參數,聲明無類型指針,顯示丟棄運算結果
    • int:整型數據,通常為編譯器指定的機器字長
    • float:單精度浮點型數據,屬於浮點數據的一種
    • double:雙精度浮點型數據,屬於浮點數據的一種
    • char:字元型類型數據,屬於整型數據的一種
  2. 類型修飾關鍵字(4個):short、long、signed、unsigned
    • short:修飾int,短整型數據,可以省略被修飾的int
    • long:修飾int,長整型數據,可以省略被修飾的int
    • singed:修飾整型數據,有符號數據類型
    • unsigned:修飾整型數據,無符號數據類型
  3. 複雜類型關鍵字(5個):struct、union、enum、typedef、sizeof
    • struct:結構體聲明
    • union:共用體聲明
    • enum:枚舉聲明
    • typedef:聲明類型別名
    • sizeof:得到特定類型或特定類型變數的大小
  4. 存儲級別關鍵字(6個):auto、static、register、extern、const、volatile
    • auto:指定為自動變數,由編譯器自動分配及釋放,通常在棧上分配空間;修飾局部變數,預設省略不寫
    • static:指定為靜態變數,分配在靜態變數區,修飾函數時,指定函數作用域為文件內部
    • register:指定為寄存器變數,建議編譯器將變數存儲到寄存器中使用,也可以修飾函數形參,建議編譯器通過寄存器而不是堆棧傳遞參數
    • extern:指定對應變數為外部變數,即標示變數或者函數的定義在別的文件中,提示編譯器遇到此變數和函數時在其他模塊中尋找其定義
    • const:與volatile合稱“cv'特性”,指定變數不可被當前線程/進程改變(但有可能被系統或其他線程/進程改變)
    • volatile:與cost合稱“cv特性”,指定變數的值有可能會被系統或其他線程/進程改變,強制編譯器每次從記憶體中取得該變數的值
  5. 流程式控制制關鍵字(12個)
    • 跳轉結構(4個):return、continue、break、goto
      • return:用在函數體中,返回特定值(或void值,即不返回值),作用:結束函數
      • continue:結束當前迴圈,開始下一輪迴圈
      • break:跳出當前迴圈或switch結構
      • goto:無條件跳轉語句
    • 分支結構(5個):if、else、switch、case、default
      • if:條件語句,後面不需要放分號
      • else:條件語句否定分支(與if連用)
      • switch:開關語句(多重分支語句)
      • case:開關語句中的分支標記
      • default:開關語句中的“其他”分支,可選
    • 迴圈結構(3個):for、do、while

        for:for迴圈結構,for(1;2;3)4;的執行順序為1->2->4->3->2…迴圈,其中2為迴圈條件

        do:do迴圈結構,do 1 while(2);的執行順序是1->2->1…迴圈,2為迴圈條件

        while:while迴圈結構,while(1)2;的執行順序是1->2->1…迴圈,1為迴圈條件

標識符

標示符就是程式員自己在程式中起的一些名字。(常見的是:變數的名稱和函數的名稱)

  1. 命名規則:(一定要遵守) 
    • 只能由26個英文字母的大小寫、10個阿拉伯數字0~9、下劃線_組成
    • 嚴格區分大小寫,比如test和Test是2個不同的標識符
    • 不能以數字開頭
    • 不可以使用關鍵字作為標識符
  2. 命名規範:(最好要遵守) 
    • 儘量起個有意義的名稱,一般用英文單詞,註意長度適中,可讀性要強。
    • 如果標識符中含有多個單詞,可以使用駝峰標識(除開第一個單詞,後面每個單詞的首字母都是大寫):
      •  firstName、myFirstName,或者使用下劃線_來連接:first_name、my_first_name
    • 一般情況下,
      • 變數名:每個單詞首字母大寫;
      • 函數(方法):第一個單詞的首字母小寫,其它單詞的首字母都大寫。

          (如:UserName    PassWord   showMessage  isPrint)

數據

  1. 靜態數據:是指一些永久性的數據,一般存儲在硬碟中。
  2. 動態數據:是指在程式運行過程中,動態產生的臨時數據,一般存儲在記憶體中。
    • 當運行某個程式(軟體)時,整個程式就會被載入到記憶體中,在程式運行過程中,會產生各種各樣的臨時數據,這些臨時數據都是存儲在記憶體中的。當程式停止運行或者電腦被強制關閉時,這個程式產生的所有臨時數據都會被清除。
    • 你可能會問:既然硬碟的存儲空間這麼大,為何不把所有的應用程式載入到硬碟中去執行呢?有個主要原因是記憶體的訪問速度比硬碟快N倍。
  3. 數據的轉換
    • 靜態數據到動態數據的轉換(也就是從磁碟載入到記憶體)
    • 動態數據到靜態數據的轉換
      •  如:手機拍照片存儲到手機的硬碟上
  1. 數據的大小
    • 不管是靜態還是動態數據,都是01組成的。
    • 數據都有大小,靜態數據就會占用硬碟的空間,動態數據就占用記憶體的空間
    • 數據越大,包含的01就越多,比特位和位元組
    • 計量單位:

        1 B = 8 bit

        1 KB = 1024 B 1 MB = 1024 KB

        1 GB = 1024 MB 1 TB = 1024 GB

變數

  • 概念

    是記憶體中的一片空間。用來保存程式運行期間的臨時數據。

    有名字,有類型

    有名字,就可以重覆使用

    變數的類型決定著變數占用多大的記憶體空間。

  • 聲明(定義)變數

    int x; 定義一個int類型的,名字叫x的變數

  • 變數的初始化

    第一次給變數叫初始化

    最好不要使用沒有初始化過的變數

#include <stdio.h>

int main() {

    int x;//x是變數名,int是變數的類型

    printf("x=%d\n", x); //x=1606422582,垃圾數據

    x = 10; //10保存到x,第一次賦值相當於初始化

    x = 20; //20保存到x,以後就叫給變數賦值

    int y = 30;//定義變數的同時初始化

    printf("y=%d\n", y);

    return 0;

}

變數的類型

分兩種:基本類型, 自定義類型

  1. 基本類型

    整形:

    有符號:可以是正數,也可以是負數。

      int     // signed int

      short int  短整形

      long int  長整形

      long long int  

    無符號:只能是正數,不能是負數

      unsigned int

      unsigned short int

      unsigned long int

      unsigned long long int

    特殊整形:

      char  

      unsigned char

    浮點型:全部是有符號

      float

      double

      long double

  1. 自定義類型: struct,  union, enum
  2. 數據的保存(二進位)

    1Byte = 8bit

    1KB = 1024Byte

    1MB = 1024KB

    …

  1. 類型的區別

    short int               2Bytes          16bit

    int                        4Bytes          32bits

    long int                     8Bytes          64bit(64位系統)   4Bytes(32位系統)

    long long int        16Bytes

 

  占用記憶體空間多,表示的數據的範圍就廣

  註意:int類型前面有其它修飾時,int可以省略。

  bool 表示布爾運算,只包含true和false兩個數值。需要在文件中加入如下語句: #include <stdbool.h>

數據類型

對應記憶體區域,其值可變,變數有相應的類型和值。

         變數類型分為字元型char、整數型int、浮點型float/double、指針、結構、聯合等類型。

#include <stdio.h>

int main() {

    float f=3.14;

    printf("f=%f\n", f);//f=3.140000

    double d=1.73;

    printf("d=%lf\n", d);//d=1.730000預設列印6位小數

    printf("f=%.2f\n", f);//保留兩位小數

    printf("sizeof(float)=%ld\n", sizeof(float));

//表示數據的範圍很大,內部使用了科學計數法來表示

    //3.143.14×10^0

    //0.003143.14×10^-3

    //省略無意義0

    f=.314;//f=0.314000

    f=3.;//f=3.000000

    f=3.14E-3;//3.14×10^-3;

    printf("f=%f\n", f);//f=0.003140

    

    f=3.14F;//float類型的字面值後面加fF

    f=3.14f;

    f=0x314F;//F代表十六進位的F

    return 0;

}

  

 

  

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 嗯,昨天忙了一天沒來及發,過年啊,打掃啊,什麼搽窗戶啊,拖地啊,整理柜子啊,什麼亂七八糟的都有,就是一個字,忙。 好了,廢話也不多說,把自己學到的放上來吧。嗯,說什麼好呢,就說原型鏈啊 原型對象 每個javascript對象都有一個原型對象,這個對象在不同的解釋器下的實現不同。比如在firefox下 ...
  • 沒有設置width/height的時候,absolute元素自動填滿容器 ...
  • Node.js 博客搭建 一. 學習需求 Node 的安裝運行 會安裝node,搭建node環境 會運行node。 基礎模塊的使用 Buffer:二進位數據處理模塊 Event:事件模塊 fs:文件系統模塊 Net:網路模塊 Http:http模塊 ... NPM(node包管理工具) 第三方nod ...
  • $(document).ready(function(){ function time(){ var date=new Date(); var h=date.getHours(); var m=date.getMinutes(); var s=date.getSeconds(); $('div'). ...
  • ▓▓▓▓▓▓ 大致介紹 前面一片博客介紹了Git到底是什麼東西,如果有不明白的可以移步 Git學習之路(1)-Git簡介 ,這篇博客主要講解在Windows上安裝Git和創建一個版本庫 ▓▓▓▓▓▓ 安裝Git 因為我是用的Windows,所以就介紹一下在Windows上怎樣安裝,Linux、Mac ...
  • 一、簡介 Android的消息機制主要是指Handler的運行機制,那麼什麼是Handler的運行機制那?通俗的來講就是,使用Handler將子線程的Message放入主線程的Messagequeue中,在主線程使用。 二、學習內容 學習Android的消息機制,我們需要先瞭解如下內容。 平常我們接 ...
  • 常量 C語言有豐富的數據類型,在開發中,一般用常量或者變數來表示這些數據 "量"表示數據。常量,則表示一些固定的數據,也就是不能改變的數據。 10.1;// 雙精度double 5.2f; //單精度float 'a'; // 字元型常量 'ab'; // 錯誤 '李'; // 錯誤寫法, 因為一個 ...
  • 有關NSLog調試問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...