20160122.CCPP詳解體系(0001天)

尹成發表於2016-02-16

程式片段(01):Hello.c
內容概要:HelloWorld

//01.#include表示包含的作用:
//  (1).<>:表示只在系統目錄之下進行查詢
//  (2)."":表示現在當前目錄下進行查詢,如果在當前目錄下
//      未能進行查詢到,再到系統目錄之下進行查詢
//  (3).替換:<>可以採用""進行替換,但是""不可以採用<>進行替換
#include "stdlib.h"

//02.註釋使用說明:
//  (1).多行註釋:/**/,用作專案說明
//      1.第一步
//      2.第二步
//  (2).單行註釋://

//02.函式相關問題分析:
//  (1).void:表明函式的返回值型別為空
//      該函式無需使用return關鍵字表明該函式的返回值
//  (2).int:返回值型別的特點
//      Linux當中的main函式強制要求返回值型別為int型別
//  (3).函式構成元素分析:
//      1).()表明形式引數
//      2).()和(void)都代表函式的引數為空,效果等同

//03.編譯器特性分析:
//  (1).C編譯器會自動查詢相應的靜態庫,進行自動引入
//      C編譯器寬泛
//  (2).C++編譯器不會自動查詢相應的靜態庫,不會進行自動引入
//      C++編譯器嚴格

//04.system();函式的使用說明:
//  (1).函式所接收的引數不同,那麼結果也相應的不一樣
//  (2).只接受字串
//  (3).常用命令說明:
//      1).tasklist:檢視系統程式列表(當前系統當中正在執行的程式列表)
//      2).echo用於原樣輸出一段字串

//05.return關鍵字的使用特點:
//  (1).用於結束函式的執行狀態,指導函式出棧
//  (2).return關鍵字之後的語句不會得到執行
//  注意:
//      如果在return語句的後面還有程式碼語句,那麼在Java語言環境下將會
//      直接編譯報錯,因為Java語言極度嚴謹不允許廢話出現
int main01(void)
{
    system("tasklist");//檢視系統程式列表,"tasklist"是表明字串
    system("echo Hello World!!!");//引數不同,執行的結果不同

    system("pause");//讓當前程式暫停一下,等待使用者輸入任意鍵繼續執行

    return 1;//沒有返回值,結束函式的執行狀態,函式出棧
    system("echo Hello China!!!");
}

程式片段(02):1.txt+2.txt+include.c
內容概要:HelloWorld

///1.txt
system("notepad");
system("pause");
///2.txt
//void main(){}
///include.c
//01.#include使用說明:
//  (1).#include只是將標頭檔案當中的宣告內容原樣拷貝過來
//  (2).#include可以包含任何字尾型別的檔案
//  (3).所有被包含的檔案都被當中普通文字檔案內容解析
//  (4).#include語句可以出現在檔案(標頭檔案/原始檔)當中的任何位置
//02.重名問題分析:
//  當前解決方案之下的檔案不能夠同名
//  (注意事項:即使是同一個解決方案下的跨專案檔案依然如此)
//03.包含和編譯的規律分析:
//  包含,包含的是標頭檔案(.h)
//  編譯,編譯的是原始檔(.c,.cpp)
//  (編譯器會自動將.c/.cpp本質的檔案進行編譯,即使是修改了檔案的
//  副檔名稱,但是檔案的本質依然還是被編譯的物件)
//04.VC編譯器當中的提示特點:
//  只是針對於程式碼檔案(標頭檔案/原始檔)具備提示
#include <stdlib.h>

int main(void)
{
#include "1.txt"
    system("pause");
    return 1;
}                 

程式片段(03):return.c
內容概要:HelloWorld

#include <stdio.h>
#include <stdlib.h>

//int main(void)
//{
//
//  return;
//}

int add()//int整數
{
    return 100;
}

//01.CCPP當中的函式返回值特點分析:
//  (1).CCPP當中的main函式即使宣告瞭整數返回型別
//      卻依然可以不用顯式的採用return關鍵字返回整數值
//  (2).普通函式有些不同:
//      C語言當中即使宣告瞭返回值型別也可以不用採用return
//          關鍵字進行值的返回
//          (注意:如果此時獲取返回值的結果,將會是編譯器指定的
//          一個固定垃圾值(表明垃圾,表明垃圾明顯))
//      C++語言當中只要宣告瞭返回值型別就必須採用return
//          關鍵字進行值的返回
//  (3).CCPP編譯器的不同所造成的差異:
//      C語言編譯器:
//          要求鬆散,很容易出錯
//      C++語言編譯器:
//          要求嚴格一些,結果會正確
//02.列印結果特點分析:
//  %d表示將記憶體當中的二進位制數資料採用有符號十進位制的方式進行解析
int main(void)
{
    printf("%d", add());

    system("pause");
    return 1;
}

程式片段(04):system.c
內容概要:system();函式

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

//01.從控制檯獲取一個命令字串並且執行:
//  (1).C語言當中的字元陣列代表的就是字串
//  (2).scanf();函式的第二項必須是地址(指標)
//      陣列名稱比較特殊,陣列名稱是一個常量指標
//  (3).printf();函式的第二項所需的是變數,而非指標
int main(void)
{
    char str[100] = { 0 };//空字串,初始化為0,'\0'(0和'\0'在這裡的意義相同)
    scanf("%s", str);//給字串進行賦值操作,從首地址開始,一個一個字元的對映
    printf("您所需要執行的指令是:%s", str);//列印字串
    system(str);//執行系統指令

    system("pause");
    return 1;
}

程式片段(05):Time.c
內容概要:C語言程式結構

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

//01.編譯階段所需做的事情:
//  (1).預編譯:
//      1).預處理階段,凡是預處理指令內容都得進行處理
//      2).預處理指令:
//          (1.以"#"作為開頭的命令
//          (2.常見預處理指令:#define+#include
//      3).預處理判斷,預處理替換
//      4).預處理之後的結果還是原始檔
//  (2).編譯:
//      1).將預處理之後的原始檔編譯成為二進位制檔案(中間檔案,物件檔案)
//      2).二進位制檔案特點:GCC編譯結果為".o"檔案,VC編譯結果為".obj"檔案
//02.全域性宣告特點:
//  (1).程式一旦載入進記憶體,全域性宣告的內容就立刻出現了
//  (2).全域性申明內容的作用域:
//      從當前原始檔的宣告位置到跨程式原始碼範圍內都可見
//      (只有當前原始檔的宣告位置開始之前不能夠進行訪問)
int num = 100;//全域性宣告

//02.同步非同步執行問題分析:
//  (1).同步非同步概念:
//      同步:單條執行流,從上往下進行執行,一個一個的執行,不允許跨越執行
//      非同步:多條執行流,從上往下進行執行,每條執行流隨機執行,沒有跨越的概念
//  (2).system函式的同步非同步操作:
//      命令字串沒有start-->同步執行-->單條執行流-->發生阻塞特點
//      命令字串含有start-->非同步執行-->多條執行流-->沒有阻塞特點
//  (3).system();函式的非同步等同於:
//      另起一個命令列視窗執行該命令,和當前命令列不屬於同一個執行流
int main01(void)
{
    //system("notepad");//後面的語句必須要等待當前程式退出,才會得到執行的機會,同步
    system("notepad");//不等待退出就得到執行,叫做非同步
    system("tasklist&pause");

    system("pause");
    return 1;
}

int main02(void)
{
    system("start notepad");//非同步開啟一個記事本

    Sleep(5000);

    system("taskkill /f /im notepad.exe");

    system("pause");
    return 1;
}

//03.無限迴圈的實現方式:
//  (1).while(0){無限執行體;}
//  (2).值為非0,死迴圈;值為0,不迴圈
int main03(void)
{
    while (1) 
    {
        system("start notepad");
    }

    system("pause");
    return 1;
}

int main04(void)
{
    int num = 10;
    printf("%d \n", num);

    system("pause");
    return 1;
}

int main05(void)
{
    system("start notepad");
    main();//遞迴-->死迴圈

    return 1;
}

程式片段(06):QQ.c
內容概要:C語言程式設計流程

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <shellapi.h>

//01.system();函式使用總結:
//  (1).早期版本可以直接跟路徑,如果版本不能跟路徑
//  (2).指令字串當中如果有start,則不能跟路徑
//       指令字串當中若沒有start,則可以跟路徑
void close()
{
    //start不能攜帶路徑,需要提前進入到目錄,再進行命令的執行
    //system("D:\\ProgramFiles\\Tencent\\QQ\\QQScLauncher.exe");
    //system("\"D:\\ProgramFiles\\Tencent\\QQ\\QQScLauncher.exe\"");
}

//01.同步執行命令與非同步執行命令:
//  執行特點分析:
//      system();
//          1.同步執行指令字串
//          2.不能執行攜帶路徑的指令
//      system("start ");
//          1.非同步執行指令字串
//          2.不能執行攜帶路徑的指令
//      ShellExecuteA(0,"open","notepad",0,0,1);
//          1.非同步執行指令字串
//          2.可以執行攜帶路徑的指令
//          3.可定製執行攜帶路徑的指令特點
//              第一個引數:預設-->0
//              第二個引數:操作-->"open"
//              第三個引數:命令-->"notepad"
//              第四五個引數:預設
//              第六個引數:0-->隱式開啟;1-->預設開啟;3-->最大化開啟;6-->最小化開啟
void openNote()
{
    ShellExecuteA(0, "open", "notepad", 0, 0, 6);
}

void openQQ()
{
    ShellExecuteA(0, "open", "D:\\ProgramFiles\\Tencent\\QQ\\Bin\\QQScLauncher.exe", 0, 0, 1);
}

void time()
{
    int num = 0;
    scanf("%d", &num);
    int i = 0;
    while (i < num)//i>=m將不再迴圈
    {
        Sleep(1000);//迴圈一次,睡眠1000毫秒,也就是1秒鐘-->迴圈多少次,也就執行了多少秒
        i++;
        printf("%d", i);
    }
}

void closeQQ()
{
    system("taskkill /f /im QQ.exe");
}

int main01(void)
{
    //close();

    openQQ();

    time();

    closeQQ();

    system("pause");
    return 1;
}

程式片段(07):1.h+define.c+程式碼混淆.c
內容概要:#define巨集定義使用

///1.h
#include <stdlib.h>
#include <stdio.h>

//01.巨集定義原始檔:
//  (1).相當於ASCII碼錶的查詢特點
//  (2).相當於編解碼特點
//  (3).相當於加密的特點
#define _ void
#define __ main
#define ___ (
#define ____ )
#define _____ {
#define ______ }

#define _______ printf("Helloc China, Hello World! \n");
#define ________ system("echo 鋤禾日當午, 吳偉來跳舞; 地雷埋下土, 炸成二百五! \n");
#define _________ system("ipconfig");
#define __________ system("calc");
///define.c
#include <stdlib.h>
#include <stdio.h>

#define 給老夫跑起來 main01
#define 執行 system

//01.列印輸出一段文字的使用特點:
//  (1).輸出方式的本質不同:
//      IO輸出方式:printf();
//      system方式:system("echo");
//  (2).輸出方式的效果完全等效
//02.巨集定義#define使用特點:
//  #define 巨集名 原始字串
void  給老夫跑起來()
{
    printf("Hello China, Hello World! \n");
    system("echo 鋤禾日當午, 吳偉來跳舞; 地雷埋下土, 炸成二百五! \n");
    system("ipconfig");
    執行("calc");

    system("pause");
}
///程式碼混淆.c
//01.引入巨集定義規則檔案:
//  1.根據規則使用巨集名
//  2.巨集定義解密需要巨集定義規則檔案
//      1.也就是所謂的巨集定義規則標頭檔案,查詢巨集定義規則標頭檔案可以實現解碼
//      2.預編譯的時候,其實就是將巨集名替換為原始的字串
#include "1.h"

_ __ ___ ____ _____ _______ ________ _________ __________ ______

程式片段(08):1.h+define.c
內容概要:#define巨集定義使用

///1.c
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>

//01.標頭檔案的性質說明:
//  巨集定義規則檔案,根據巨集定義的規則
//  進行規則的使用
#define 空型別 void
#define 主函式 main
#define 左括號 (
#define 右括號 )
#define 左大括號 {
#define 右大括號 }
#define 執行 system
#define 列印 printf
#define 記事本 "notepad"
#define 計算器 "calc"
#define 系統程式 "tasklist & pause"
#define 語句結束 ;
///define.c
#include "1.h"

空型別 主函式 左括號 右括號
左大括號
    列印 左括號 記事本 右括號 語句結束
    執行 左括號 計算器 右括號 語句結束
    執行 左括號 記事本 右括號 語句結束
    執行 左括號 系統程式 右括號 語句結束
右大括號

相關文章