c高級自我學(xué)習(xí)(1)

1 編譯預(yù)處理和宏定

  • #undef指令刪除前面定義的宏定義。

  • 無參宏定義:宏名中沒有參數(shù)。

1,宏定義中宏名用來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一個簡單的代換,字符串可以為常數(shù)或者表達式。有錯誤的話也只能在編譯時發(fā)現(xiàn)
2,宏名不是說明或語句,在行某不必加分號,會連分號也一起置換。
3,宏定義要寫在函數(shù)外,作用域為宏定義命令起到源程序結(jié)束。
4,宏名在源程序中若用引號括起來,則預(yù)處理程序不對其作宏代換。
#include<stdio.h> define OK 100 void main(){ printf("OK"); }
5,宏定義也允許嵌套。

6,習(xí)慣上宏名用大寫字母表示。

7,可用宏定義表示數(shù)據(jù)類型,使書寫方便。
STU body[5],*p;#define INTEGER int;

  • 用宏定義表示數(shù)據(jù)類型和用typedef定義數(shù)據(jù)說明符的區(qū)別:宏定義常用來定義常量,僅僅是簡單的字符串代換,易產(chǎn)生代碼的弊端;
    typedef只是為增加可讀性,而起的新名稱,常用來定義關(guān)鍵字、冗長的類型別名,typedef不是原地擴展,具有一定的封裝性,使其更具定義變量的功能。

  • 帶參宏定義: #define 宏名(形參表) 字符串
    1, 帶參宏定義中,宏名和形參表之間不能有空格出現(xiàn)。
    2, 在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因此不必作類型定義。有疑問
    3,在宏定義中的形參是標識符,而宏調(diào)用中的實參可以是表達式。
    4,在宏定義中的形參通常要用括號括起來以避免出錯,最外邊通常需要加括號,否則容易出錯。
    5,帶參的宏定義和帶參函數(shù)看起來很相識,但是運算結(jié)果可能不同。
    例A:int main(){ int i = 1; while(i <= 5) printf("%d\n",SQ(i++)); return 0; } int SQ(int y){ return ((y)*(y)) }例B:#define SQ(y) ((y)*(y)) int main(){ int i = 1; while(i < 5) printf("%d\n",SQ(i++)); return 0; }兩個示例的結(jié)果不同
    6,宏宏定義中可以用來表示多條語句。

  • 文件包含

#include <stdio.h>#include "stdio.h"兩者的區(qū)別是:使用尖括號表示包含文件目錄中去查找,雙引號則表示首先在當前的源文件目錄中查找,若未找到,則到包含文件目錄中查找。

  • 條件編譯

1,#if #else #elif #endif
#if expression Statement sequence \#elif expression1 Statement sequence \#elif expression2 。。。。 \#elif expression Statement sequece \#endif
2,#ifdef和#ifndef

  • 第一種形式:

#ifdef 標識符
程序段 1 (標識符被宏定義時編譯)
#else

程序段 2(否則編譯)
#endif

  • 第二種形式:

#ifndef 標識符
程序段 1(標識符不被宏定義時編譯)
#else
程序段 2(否則編譯)
#endif

  • 第三種形式:

#if 常量表達式
程序段 1(如果表達式為真時編譯)
#else
程序段 2(否則不編譯)
#endif

  • #和##
  1. 操作符#通常稱為字符串化的操作符,把它其后的串變?yōu)殡p引號包圍的串。
    #define mkstr(s) #s printf(mkstr(I like C));
    2)操作符##可以將兩個獨立的字符串鏈接起來。
    #define SORT(X) sort_function # # x,將字符串sort_functionx連接起來
  • 預(yù)定義宏

固有的中預(yù)定義宏:
__DATE__ 進行預(yù)處理的日期(“Mmm dd yyyy”形式的字符串文字)
__FILE__ 代表當前源代碼文件的字符串文字
__LINE__ 代表當親源代碼中的行號的整數(shù)常量
__TIME__ 源文件編輯時間,格式 “hh:mm:ss”
__func__ 當前所在函數(shù)名
對于__FILE__ ___LINE__,__func__這樣的宏調(diào)試程序時是很有用的

產(chǎn)生的疑問:

在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因此不必作類型定義(不分配內(nèi)存單元是什么意思,想明白參數(shù)之間傳遞是如何分配內(nèi)存的)。



課堂筆記

  • ls命令

ls [選項] (參數(shù))
選項:
-a 查看所有文件或目錄,包括隱藏文件(以.開頭的文件都是隱藏文件)
-l 查看目錄或者文件屬性
-d 列出目錄自身的信息
這三個命令可以混合使用,如:-ld -la
參數(shù)就只文件夾。

  • tree

安裝sudo apt-get install tree
作用:列出此目錄下的所有文件(及子目錄)

作業(yè):

1,了解linux系統(tǒng)的基本組成
*Linux內(nèi)核:硬件1)控制硬件設(shè)備,基本硬件I/O接口,內(nèi)存管理;
軟件2)管理文件系統(tǒng),為程序分配內(nèi)存空間和CPU時間

  • Linux應(yīng)用程序:文本編輯器,編程語言,x Windows,辦公軟件,數(shù)據(jù)庫等。
  • Linux Shell:Shell命令解釋器,他解釋有用戶輸入的命令并把它們送入內(nèi)核執(zhí)行,shell編程語言具有很多語言編程的特點,用此編程語言和其他編程語言具有相同的作用
  • Linux文件系統(tǒng):
    普通文件:-
    目錄文件:d
    鏈接文件:l
    管道文件:p
    塊設(shè)備文件:b
    字符文件:c
    2,復(fù)習(xí)ls及tree命令的使用方法
    已完成
    3,注意安裝linux系統(tǒng)時,必不可少的兩個分區(qū)
    swap分區(qū)和根分區(qū)(主分區(qū))
    4,了解linux系統(tǒng)下家目錄(宿主目錄)的功能
    主要是./../的區(qū)別
    5,預(yù)習(xí)cd,more,less,cat,info,mv,cp,mkdir,rmdir,rm,touch等命令的用法
    已完成
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容