C語言【編譯器、變數、輸入輸出有關的】

来源:https://www.cnblogs.com/wangsiyaoa/archive/2023/11/15/17833664.html
-Advertisement-
Play Games

我希望在職業生涯早期就開始做的事情和我希望以不同的方式做的事情。 大家好,我已經做了八年半的軟體工程師。這篇文章來源於我最近對自己在職業生涯中希望早點開始做的事情以及希望以不同方式做的事情的自我反思。 我在這裡分享的對任何希望提高和進步到高級甚至更高職位的初級至中級開發者都很有用。 0 大綱 我的職 ...


C語言【編譯器、變數、輸入輸出有關的】

一些想到的【從編譯器到變數到輸入輸出有關的】的問題,有些是按自己理解寫的答,有些待解決。

  • C語言可以跨平臺,彙編不可以,編譯時C語言會根據不同系統翻譯成不同形式的彙編語言。

  • C語言中算數運算會在寄存器中運行,變數保存在堆或棧中。


  • 遺留問題: C語言變數名如何在彙編語言中表現的?


  • 一些C標準:

    C89 = C90 = ANSIC = 標準C

    C99 引入了一些新特性(如 單行註釋)

    C11 (2011年發行)

    ......

  • C語言C語言標準C編譯器 之間的聯繫?

    C語言 是一個泛指。

    C語言標準 是一些權威機構(也許也有個人)定義的一些語法規範。

    C編譯器 是按照C語言標准將C語言代碼翻譯成機器可以識別的指令的程式。

    C編譯器比如 gcc、clang等。

    可以通過gcc或clang編譯C語言代碼時指定C標準,如下:

    gcc -std=c89 main.c -o main		# c89的"c"一定要小寫
    clang -std=c99 main.c -o main
    

    mingw和cygwin都是用於安裝C語言編譯器的跨平臺工具, cygwin是一個類Unix環境的模擬器 。


  • 遺留問題:makefile的編寫規則?make為什麼可以運行makefile?在win上如何使用make? 

  • 遺留問題:標準輸入輸出等函數是編譯器提供的嗎?它們屬不屬於編譯器的一部分?嘗試下載gcc或clang編譯器,查看不同編譯器之間庫函數有什麼不同。 


  • main函數返回值返回到了哪裡?-----操作系統。 有沒具體點的回答呢?


  • 待附圖:C語言的執行過程? 

    • 預處理。 .c 文件 ----> .i 文件。 .i 文件為解決了#(預處理)後的文件。

      gcc -E xxx.c -o xxx.i
      
    • 編譯。 .i 文件 ----> .s 文件。 .s文件為彙編代碼文件。

      gcc -S xxx.i -o xxx.s
      
    • 彙編。 .s 文件 ----> .o 文件 / .obj 文件。 .obj 為二進位文件。

      gcc -c xxx.s -o xxx.obj   # 或
      gcc -c xxx.s 	 		# 這樣預設輸出為 .o 文件
      		 				# .o文件是Linux下預設的二進位文件
      
    • 鏈接。 多個 .o 文件 或 .obj 文件 ----> .exe文件(或其他格式可執行文件)

      gcc xxx.o -o xxx.exe	# 後面的-o xxx.exe可以不寫
      

  • 使用 scanf(...) 輸入數據時,輸入數據的格式要與 scanf(...) 中第一個參數的格式相同。且使用 scanf(...) 時不能加提示語,想要提示輸入的話,可以前面加 printf(...)

    // 格式之間是用逗號隔開,則輸入之間也用逗號隔開
    scanf("%d,%d,%d", &num1, &num2, &num3);
    // 格式之間是用空格隔開,則輸入之間也用空格隔開
    scanf("%d %d %d", &num1, &num2, &num3);
    
  • 逗號表達式和同時多個聲明並賦值使用逗號的區別? 

    兩種根本不是一回事。

    int a=10, b=20, c, d=30; 	// 這就是連續聲明或聲明並賦值
    a = (10, 2*2, 5);				// 這個是只執行最後一個值或表達式並賦值給a
    

  • 遺留問題:可不可以用"%d"輸出字元類型的數據?反過來呢?其他的格式和變數混亂輸出形式呢? 像"%d"這樣的占位符還有哪些,分別有什麼作用? 

    %d 表示十進位整數。其他問題待查 。


  • 遺留問題:有哪些變數預設初始值為0?全局變數是嗎?數組呢?局部變數?...... 

  • vscode + gcc 時,C語言文件的路徑不能有中文存在。

  • C語言中的標識符是什麼,有沒有長度限制,區不區分大小寫?

    程式中各種變數名、函數名、數組名、結構體名、枚舉類型名等。

    C語言標識符可以包含字母、數字、下劃線,但不能以數字開頭。

    沒有長度限制(也許有些編譯器或平臺會限制),但不建議寫太長。

    區分大小寫。

  • 記四個有點眼生的存儲類型關鍵字: auto、extern、register、static 分別有什麼作用待查

  • 記幾個C99增加的關鍵字:inline、restrict、_Bool、 _Complex、Imaginary 分別有什麼作用待查,似乎用處不是很廣泛

  • 記幾個C11增加的關鍵字:_Alignas、 _Alignof、 _Atomic、 Static_assert、 _Noreturn、 _Thread_local、 _Generic

  • 初步認識常量

    • 字面量常量。如1、2、3......

    • 標識符常量。

      第一種表示: #define 常量名 常量值 //預處理方式 ,一種替換,後面跟表達式時記得加括弧,不加分號

      第二種表示: const 類型 常量名 = 常量值;

      枚舉常量 待學


  • 遺留問題:main函數中的參數 int argc, char const * argv[] 有什麼含義?


  • C語言沒有乘方運算符,但可以使用math.h頭文件中的函數 pow(2, 3) 即表示2的3次方,返回double類型。


  • 遺留問題:C標準庫中的頭文件只是函數聲明的功能嗎?比如stdio.h有沒有對應的體文件?


  • 遺留問題:getchar()的具體細節?


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

-Advertisement-
Play Games
更多相關文章
  • 需求落地分散式應用服務 將需求轉化為分散式應用服務的過程可以按照以下步驟進行: 理解需求:首先,你需要仔細閱讀和理解業務需求。與相關的利益相關者(如業務分析師、產品經理等)進行溝通,確保你對需求的理解是準確的。 設計架構:根據需求,設計一個適合的分散式應用架構。這包括確定應用的組件和模塊,以及它們之 ...
  • 本文介紹了結構型設計模式中的代理設計模式,講解了靜態代理、JDK的動態代理和cglib的動態代理,並用代碼進行演示。 ...
  • 故事很老套。。就一堆漂亮姑娘毫無道理的、莫名其妙的往死里貼“我”,很煩人~只要略施小計,就能將她們攬入懷中,非常魔幻。 因為這游戲不只是火,同時還口碑超高。《美女包圍》剛發售時的好評率是83%,火了後評價不降反升,現在是恐怖的93%。 性感辣媽林樂清 —— 王星辰(身材姣好,入得廳堂下得廚房,娶妻當 ...
  • 定義 最短路樹:以圖上一個點為根節點,刪去部分邊後所形成的樹,樹的邊權滿足任意一點與根結點的路徑長度等於圖上兩點的最短路徑長度。 求法 可以採用 dij 求解。 每次更新 \(dis_v\) 時,記錄每個點最後一次用來更新的邊,即為最短路樹。 核心代碼如下,時間複雜度為 dij 的時間複雜度即 \( ...
  • 來源:juejin.cn/post/7023317351563001886 1、概述 SpringBoot框架不用多介紹,Java程式員想必都知道。相對來說熟悉Quarkus的人可能會少一些。Quarkus首頁放出的標語:超音速亞原子的Java(Supersonic Subatomic Java)。 ...
  • 概述 Java 中的引用類似 C 語言中的指針,指向一個對象,比如: // person 就是指向 Person 實例“張三”的引用 Person person = new Person("張三"); 在 JDK1.2 以前,Java 里的引用是很傳統的定義:如果 reference 類型的數據中存 ...
  • 1 前言 如果你正在準備軟體工程師或軟體開發人員的面試,那麼你可能知道由於其開放性質和廣泛性,準備系統設計是多麼困難,但同時你也不能忽略它。在軟體工程界,如果你正在申請高級工程師/主管/架構師或更高級別的角色,系統設計是最受追捧的技能,也是整個過程中最重要的環節之一。如果你搞砸了這個,其他的都不重要 ...
  • 關於Node.js的開發者來說,在開發機器上管理多個不同版本的Node.js是一個常見痛點。之前在開發者安全大全專欄中,提到過解決方法:使用nvm,如果對於nvm還不瞭解的話,可以前往瞭解。 對於TJ來說,因為習慣敲命令了,所以nvm其實已經夠用了。但是,有的小伙伴還是更喜歡可視化的管理工具。所以, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...