一文读懂命令行和C程序运行 - 指南

引言

你的代码运行需要输入命令吗?

在集成开发环境(Visual Studio等)中

1.点击“新建项目”
2.写代码
3.按F5运行
4.在控制台窗口交互

而在文本编辑器(Visual Studio Code等)中

1.在文本编辑器/记事本中写代码
2.在CMD中输入命令,从而运行

你是否会疑惑:到底要输入什么命令?为什么非要输入命令?

本文将带你一步步理解命令行的世界,解答这些疑问。


一、命令、命令行、命令行环境

1.什么是命令

一个命令是由字符组成的文本指令,用于告诉计算机执行特定任务

一个完整的命令结构:基础命令+命令行参数

  • 基础命令:要执行的操作:如dir(列出当前目录)

  • 命令行参数:放在基础命令后,用于修改命令的行为或为命令提供额外信息

Windows中的命令行参数形式

  • 选项/标志/-(例:dir -a显示所有文件)

  • 参数/参数值:提供命令操作的具体对象(例:copy file.txt,copy为基础命令,file.txt为参数,意为“复制file文件”)

所以一个完整的命令结构可表示为基础命令 [选项] [参数]

例子:(REM起到注释的作用,相当于//

REM 基础命令
dir
REM 带参数的命令
dir /a              REM 显示所有文件(包括隐藏和系统文件)
dir /w              REM 宽列表格式
dir /s              REM 包括子目录
dir C:\\Windows      REM 列出指定目录的内容
REM 更复杂的例子
xcopy source destination /s /e /i
REM 命令:xcopy
REM 参数:source (源), destination (目标)
REM 选项:/s (复制非空目录和子目录)
REM 选项:/e (包括空目录和子目录)
REM 选项:/i (如果目标是目录或包含多个文件则假定为目标目录)
REM 文件操作
copy file1.txt file2.txt
del /q *.tmp

核心问题

命令有了,我们如何发出命令呢

2.命令行:发出命令的地方

  • 命令行是一个基于文本的输入/输出界面

  • 用户与计算机的交互方式

    • 用户图形界面(GUI):通过鼠标点击、拖拽等动作
    • 命令行界面(CLI):通过键盘输入文本命令
  • 总结

    • 是一个界面,有一个闪烁的光标和命令提示符(如:C:\Users\You>
    • 你在这里输入命令,然后按回车来执行它
    • 它负责接收你的输入显示计算机的输出
  • 核心问题

    命令行负责接收输入和显示输出,那么谁来理解解释这个命令并去执行呢

3.命令行环境

  • 命令行环境是一个软件环境,包含理解、解释和执行你在命令行中输入的命令 所需的全部组件

  • 核心组件

    1.Shell(命令行解释器)

    接收你输入的文本,理解你的意图,调用相应的程序来执行(例如Windows系统上的cmd和powershell)

    如何打开shell呢?

按住键盘win+R,输入cmd

image-20251031191044568

点击“确定”

image-20251031191307036

同理,输入PowerShell

image-20251031191427931

2.终端:是一个图形化应用程序,为shell提供运行窗口。负责显示命令行界面,并将你的按键传递给shell,再讲shell返回的结果显示在屏幕上(例:Windows Terminal)

3.系统工具和命令集:是shell可以调用的实际程序文件。当你输入ls时,shell会为它找到名为ls的程序文件并运行它(例:操作系统自带的cp,mv,你安装的Git,node等)

4.总结:命令执行流程

命令行环境=终端+Shell+系统工具+它们之间的协作关系

image-20251102154147540

通俗的讲:

  • 终端是那个黑框框窗口
  • 命令行是窗口里那个让你打字和显示文字的地方
  • Shell是藏在背后的“大脑”,负责理解你的命令
  • 系统工具是真正动手干活的“工人”
  • 命令行环境是这个有窗口、有界面、有大脑、有工人的“整个工作室”

平常所说的“我正在用命令行”,实际上指的是我正在一个命令行环境中工作。命令行指的是这个环境的外观,Shell是这个环境核心工作的部分


二、命令行的演变历史

1970年代:

物理终端(只有键盘和显示器)
    ↓
通过串线连接到大型机
    ↓
输入命令操作计算机

1980-1990年代:

个人电脑 + DOS/Unix
↓
命令行界面是主要交互方式

2000年代:

图形界面操作系统(即通过鼠标点击)
↓
IDE成为主流,但命令行仍在后台

三、藏在C语言中的命令行

1.IDE与命令行的比较运行

IDE中交互式运行

#include <stdio.h>
  int main() {
  printf("请输入你的名字: ");
  char name[100];
  scanf("%s", name);
  printf("你好, %s!\n", name);
  return 0;
  }

步骤:1.按F5或 绿色的运行箭头

​ 2.在控制台窗口中输入内容

​ 3.看到输出

image-20251031193646989

命令行中编译并运行

#include <stdio.h>
  int main(int argc, char *argv[]) {
  if(argc < 2) {
  printf("用法: %s 名字\n", argv[0]);
  return 1;
  }
  printf("你好, %s!\n", argv[1]);
  return 0;
  }

步骤:1.将代码保存为hello.c

联想截图_20251031203718

​ 2.打开命令行,进入代码所在目录

​ 3.编译运行

联想截图_20251031203846

联想截图_20251031203940

我们在上方见到的argcargv便是main函数中的命令行参数

2.main函数中的命令行参数

我们常见的库函数和自定义函数的括号里是参数类型,而我们main函数后的括号也有参数

在标准C中,主函数仅支持两种参数形式,argcargv

int main(int argc,char*argv[]){
return 0;
}
  • argc:(Argument Count) ,意为“参数计数“

    表示程序启动时接收到的命令行参数的总个数(包含程序本身的名称)

  • argv:(Argument Vector),意为“参数向量”

    本质是一个字符串数组,用于存储程序启动时接收到的所有命令行参数。

argv[0]:程序本身的路径或名称。

argv[1]及以后:依次存储用户输入的其他命令行参数

  • 举例:C:\>repeat Rsistance is futile

    argc=4

    argv[0]=“repeat”

    argv[1]=“Rsistance”

    argv[2]=“is”

    argv[3]=“futile”

  • 现在我们回过来看上方代码:argc=2,argv[0]=“hello”,argv[1]=“张三”

四、为什么要学习命令行

1.可以批量处理重复文件:比如一口气给1000个文件改名

2.找东西效率高:图形界面中可能要点开好几个文件夹,在命令行中一句find指令就解决了

3.命令行占用内存少:不卡顿

4.说白了就是你真正理解电脑是怎么工作的,不会被花里胡哨的界面迷惑,能直接给电脑下命令。当别人只会重启解决问题时,你已经能通过几条命令找到问题的根结了。


五、常用命令示例(Windows)

命令说明
dir列出当前目录文件
cd 目录名切换目录
cls清屏
gcc hello.c -o hello编译c程序
md 新目录名创建新目录
del 文件名删除文件

总结与下一步

1.总结

1.命令、命令行、命令行环境的基本概念

2.命令行在C语言编程中的应用

3.命令行学习的必要性

4.如何在Windows中使用基本命令

2.下一步建议

1.尝试在命令行中编译和运行你的C程序

2.探索更多命令行工具,如Git


快来尝试吧!

posted @ 2025-12-02 09:20  yangykaifa  阅读(19)  评论(0)    收藏  举报