日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于面向过程编程的一些思考

發布時間:2025/3/18 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于面向过程编程的一些思考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

關于面向過程編程與指針的一些思考

長期以來,雖然有C語言的基礎,但對C的使用主要停留在書面例子的基礎上,沒有復雜的功能和調用關系,因此,對面向過程的理解并不深刻。而使用java、js編寫功能的時候,通常都是面向對象的思想。

在本例中,會有大量使用指針的場景,使得多個函數作用于同一個變量,C中沒有成員函數的概念,函數是公有的,靠指針區別變量。這一點也讓我有些不適應。

既然是一些思考,并沒有刻意組織結構,會非常雜亂無章,請看到的朋友諒解。

在開始閱讀教程的時候,函數與函數之間的調用、輸出都感覺異常的別扭。下面逐步的分析下這個程序。如果有同道朋友看到了這篇博文,請配合摘要中github庫的代碼閱讀。

程序主要做了哪些事?

在教程中,包含一個解析庫,和一個單元測試,單元測試會統計:

  • 執行了多少次測試
  • 通過了多少次
  • 通過率
  • 返回一個標記
  • 解析庫是實際上執行解析動作的部分,主要包含:

  • 根據json的標準去分析傳入的字符串
  • 根據不同的數據類型,講解析后的結果放入json結構體
  • 程序執行過程

    單元測試是怎么工作的?

    本教程中,單元測試主要包含一個基礎的比較和信息輸出函數(宏),以及一個在此基礎上的不同形式的比較函數。 單元測試會調用實際的處理函數。

    測試解析string類型json值的流程

    test_parse_string函數

    這個函數是測試分割string單元的入口:

    static void test_parse_string() {TEST_STRING("", "\"\"");TEST_STRING("Hello", "\"Hello\"");

    TEST_STRING是一個宏,這里只是替換下代碼:

    #define TEST_STRING(expect, json) \do { \lept_value v; \lept_init(&v); \EXPECT_EQ_INT(LEPT_PARSE_OK, lept_parse(&v, json)); \EXPECT_EQ_INT(LEPT_STRING, lept_get_type(&v)); \EXPECT_EQ_STRING(expect, lept_get_string(&v), lept_get_string_length(&v)); \lept_free(&v); \} while (0)

    注意在TEST_STRING函數的一開始,有一句lept_value v;,這個變量會存在于整個解析過程中,使用指針對這個變量進行修改,而最終的結果,也在這個宏函數中進行比較。形參中的json同理。面向過程編程中,數據和方法是分離的

    接下來是變量v的初始化,對我來說,這顯得有些無章法,調用一個函數,傳給它一個變量的指針,對其做出修改,顯然,這是C語言中常用的方式。

    lept_parse_string函數

    static int lept_parse_string(lept_context *c, lept_value *v) {size_t head = c->top, len;const char *p;EXPECT(c, '\"');p = c->json;for (;;) {char ch = *p++;switch (ch) {case '\"':len = c->top - head;lept_set_string(v, (const char *)lept_context_pop(c, len), len);c->json = p;return LEPT_PARSE_OK;case '\0':c->top = head;return LEPT_PARSE_MISS_QUOTATION_MARK;default:PUTC(c, ch);}} }

    lept_parse_string函數是實際上分割字符串的函數,主要做了這些事:

  • 往棧中壓入字符
  • 錯誤檢測與處理
  • 將解析成功的字符串放入lept_value *v中
  • 這個函數中仍然有很多疑難點,需要時刻牢記一點函數與數據是分離的,會有多個函數通過指針的方式對數據做出更改,因此關于這個函數第一句size_t head = c->top, len;,head就是為了記錄更改前的c->top的值,這一點應該是在設計的時候就確定的,遺憾的是我需要在后面需要用到的時候才想到。

    轉載于:https://my.oschina.net/alextuan/blog/801758

    總結

    以上是生活随笔為你收集整理的关于面向过程编程的一些思考的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。