【华为仓颉编程语言】运行第一个仓颉程序

欢迎来到仓颉编程语言的第一个实战课程。

上节课我们成功安装了仓颉工具链,今天让我们一起编写并运行第一个仓颉程序。相信很多同学都还记得学习第一门编程语言时写的"Hello World"程序,那种看到程序成功运行的激动心情。今天,我们就要在仓颉语言中重现这个经典时刻!

一、第一个程序的完整流程

让我们先看看编写和运行仓颉程序的完整流程:

开始
创建源文件
编写代码
保存文件
编译程序
运行程序
查看输出
hello.cj
main函数
cjc编译器
可执行文件
你好,仓颉

看起来步骤不少,但实际操作起来非常简单。让我来一步步带大家完成。

二、创建第一个仓颉源文件

首先,我们需要创建一个仓颉源文件。仓颉源文件的扩展名是.cj,这就像Java用.java,Python用.py一样。

文件命名规则
扩展名
文件名
编码格式
.cj
仓颉源文件
hello
简洁明了
UTF-8
支持中文
hello.cj
完整文件名

创建一个名为hello.cj的文件。注意:

  • 文件名可以自定义,但建议使用有意义的名称
  • 扩展名必须是.cj
  • 建议使用UTF-8编码,这样可以在代码中使用中文

三、编写Hello World程序

现在让我们来编写代码。打开hello.cj文件,输入以下内容:

// hello.cj
main() {println("你好,仓颉")
}

让我详细解释一下这段代码的每个部分:

代码结构
注释
main函数
函数体
// hello.cj
单行注释
main()
程序入口
{...}
代码块
println函数
打印功能
自动换行
你好,仓颉
字符串参数

代码解析

  1. 注释部分// hello.cj

    • 这是单行注释,用于说明文件名
    • 仓颉支持两种注释方式
  2. main函数main() { ... }

    • 这是程序的入口点
    • 注意:仓颉的main函数不需要func关键字
    • 每个可执行程序都必须有main函数
  3. println函数println("你好,仓颉")

    • 用于打印输出
    • 自动在末尾添加换行符
    • 可以打印中文字符串

四、仓颉的注释系统

让我们深入了解一下仓颉的注释语法:

注释类型
单行注释
多行注释
// 开头
到行尾结束
用于简短说明
/* 开始
*/ 结束
可跨越多行
使用场景
文件说明
函数说明
代码解释
临时屏蔽

示例:

// 这是单行注释,解释下面的代码/* 这是多行注释可以写很多行用于详细说明 */main() {// 打印欢迎信息println("你好,仓颉")  // 行尾注释/* 暂时屏蔽这段代码println("这行不会执行")*/
}

五、编译仓颉程序

代码写好了,接下来要编译它。仓颉使用cjc编译器:

用户终端cjc编译器文件系统输入编译命令cjc hello.cj -o hello调用编译器读取hello.cj词法分析语法分析语义分析代码生成生成可执行文件hello (Linux/macOS)hello.exe (Windows)编译完成用户终端cjc编译器文件系统

编译命令详解

编译命令
cjc
hello.cj
-o
hello
编译器名称
源文件
输出选项
输出文件名
平台差异
Linux/macOS
Windows
cjc hello.cj -o hello
cjc hello.cj -o hello.exe

命令解释:

  • cjc:仓颉编译器的命令
  • hello.cj:要编译的源文件
  • -o:指定输出文件名的选项
  • hello:生成的可执行文件名

六、运行程序

编译成功后,让我们运行程序:

运行方式
Linux/macOS
Windows
./hello
输出结果
hello.exe
.\hello.exe
你好,仓颉

不同平台的运行命令:

  • Linux/macOS: ./hello
  • Windows: hello.exe.\hello.exe

七、完整的开发流程演示

让我们把整个过程串起来看:

运行阶段
编译阶段
编写阶段
执行程序
查看输出
执行cjc命令
生成可执行文件
创建hello.cj
编写main函数
添加println

八、常见问题与解决方案

常见问题
编译错误
运行错误
输出问题
文件名错误
语法错误
路径问题
权限不足
找不到文件
乱码问题
没有输出
检查扩展名.cj
检查括号匹配
chmod +x
使用UTF-8

问题解决指南

  1. 找不到cjc命令

    • 检查是否正确安装仓颉工具链
    • 确认环境变量配置正确
  2. 编译报错

    • 检查文件扩展名是否为.cj
    • 确认代码语法正确,特别是括号匹配
  3. 运行时权限不足(Linux/macOS)

    • 使用chmod +x hello添加执行权限
  4. 中文乱码

    • 确保源文件使用UTF-8编码
    • 检查终端编码设置

九、扩展练习

现在你已经成功运行了第一个仓颉程序,让我们尝试一些变化:

// 练习1:打印多行
main() {println("你好,仓颉")println("Hello, Cangjie")println("欢迎来到仓颉的世界!")
}// 练习2:使用print不换行
main() {print("你好,")print("仓颉")println("!")  // 最后换行
}// 练习3:添加更多注释
/* * 我的第一个仓颉程序* 作者:你的名字* 日期:今天的日期*/
main() {// 使用中文打印欢迎信息println("你好,仓颉")// 也可以用英文println("Hello, Cangjie")
}

课程总结

今日要点
源文件
编译
运行
调试
.cj扩展名
UTF-8编码
cjc编译器
-o指定输出
./执行
查看结果
理解错误
解决问题

恭喜你!今天我们成功完成了:

  1. 创建了第一个仓颉源文件 - hello.cj
  2. 编写了第一个仓颉程序 - 包含main函数和println
  3. 学会了编译命令 - cjc的基本使用
  4. 成功运行了程序 - 看到了"你好,仓颉"

这虽然是个简单的程序,但它标志着你正式踏入了仓颉编程的大门。从这个简单的开始,我们将逐步学习更多仓颉的特性和功能。


作业

  1. 创建一个新的程序,打印你的名字和今天的日期
  2. 尝试使用多行注释记录你的学习心得
  3. 探索print和println的区别

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92643.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用DeepSeek改写并增强测试Duckdb和sqlite的不同插入方法性能

在前文基础上,好奇作为事务型数据库的SQLite表现怎么样,让DeepSeek来帮忙。 提示词 请仿照附件编写用python插入sqlite数据的测试函数,如果sqlite3没有对应方法就省略 import sqlite3 import pandas as pd import timemethods [字符串拼接, …

进程管理块(PCB):操作系统进程管理的核心数据结构

进程管理块(PCB):操作系统进程管理的核心数据结构在现代操作系统中,进程管理块(Process Control Block, PCB) 是内核用来描述、管理和控制进程生命周期的最核心、最关键的数据结构。它就像是一个进程的“身…

线程的sleep、wait、join、yield如何使用?

sleep:让线程睡眠,期间会出让cpu,在同步代码块中,不会释放锁 wait(必须先获得对应的锁才能调用):让线程进 入等待状态,释放当前线程持有的锁资源线程只有在notify 或者notifyAll方法调用后才会被唤醒,然后去争夺锁. join: 线程之间协同方式,使…

2025年服装智能跟单系统TOP3推荐榜单

TOP1领军者首选推荐:金蝶服装系统【★★★★★】 在服装智能跟单系统的领域,金蝶服装系统凭借其强大的功能和卓越的性能脱颖而出,成为众多企业的首选。尽管本文标题提及的是另一份榜单,但值得一提的是,金蝶系统若参与评…

基于FFmpeg的B站视频下载处理

起因是这样的一天,本人在B站客户端缓存了一个视频,用于学习参考等学术交流,但是视频和音频却是分开且通过Win Hex查看发现文件头含有9个“30”,想到一个个手动删字节不如让程序取代,便有了本文章这一篇文章发布之前&am…

【Vue Router】路由模式、懒加载、守卫、权限、缓存

前言 Vue Router 是 Vue 生态中处理页面跳转的核心工具,它解决了单页应用中 URL 管理、组件切换、状态维护等关键问题,同时提供了丰富的功能(如动态路由、嵌套路由、路由守卫)。除了经常用到的路由配置以外,我们还需了…

Linux epoll 实现详解 (fs/eventpoll.c)

核心数据结构分析 1. struct eventpoll (epoll 实例核心结构) c struct eventpoll {struct mutex mtx; // 保护 epoll 结构的互斥锁wait_queue_head_t wq; // epoll_wait() 使用的等待队列wait_queue_head_t poll_wait; // 文件 poll() 使用的等待队列struc…

【牛客刷题】小红的项链(字节跳动面试题)

文章目录 一、题目介绍 1.1 输入描述 1.2 输出描述 1.3 示例 二、算法设计思路 三、流程图 四、题解实现 五、复杂度分析 六、关键算法知识点 一、题目介绍 原题链接:https://www.nowcoder.com/practice/3da065cab096478eb603bbfca5af8b02 小红将 n n n个珠子排成一排,然后…

【Html网页模板】HTML炫酷星空(一闪一闪亮晶晶)

文章目录专栏导读功能预览快速开始核心实现拆解1. 背景与基础布局2. 背景层静态星空(轻微闪烁)3. 前景层“亮晶晶”的闪烁小星星4. 交互与动效5. 行星装饰可配置项与个性化建议初始化顺序(入口)源码结语专栏导读 🔥&am…

第一天-CAN Signal信号的Multiplexor多路复用在DBC中实现

🚀 CAN总线的“变形金刚术”:Multiplexor多路复用信号深度揭秘在汽车电子江湖中,当数百个ECU争相发送数据时,如何让一条CAN报文像"变形金刚"一样自由切换形态?Multiplexor(多路复用)技…

Code Exercising Day 10 of “Code Ideas Record“:StackQueue part02

文章目录【150. Evaluate Reverse Polish Notation】【239. Sliding Window Maximum】【347. Top K Frequent Elements】【150. Evaluate Reverse Polish Notation】 Problem Link Approach: Use a stack. Push numbers onto the stack; when encountering an operator, pop t…

系统架构设计师备考之架构设计高级知识

1.系统架构设计基础知识1.1.软件架构概念软件架构定义软件架构(Software Architecture)或称软件体系结构,是指系统的一个或者多个结构,这些结构包括软件的构件(可能是程序模块、类或者是中间件)、构件的外部…

PWM波的频谱分析及matlab 验证[电路原理]

你知道吗?pwm可以制作adc模块哦!这样普通的gpio也能实现adc功能了。 我们嵌入式日常接触的pwm波,你真的了解他吗? 只有知道PWM的频谱是怎么样的,才能设计合适的滤波器,下面我们一起从底层数学原理来推导PWM…

相机、镜头参数详解以及相关计算公式

一、工业相机参数 1、分辨率 相机每次采集图像的像素点数,也是指这个相机总共有多少个感光晶片。在采集图像时,相机的分辨率对检测精度有很大的影响,在对同样大的视场成像时,分辨率越高,对细节的展示越明显。 相机像素…

通信中间件 Fast DDS(一) :编译、安装和测试

目录 1.简介 2.Windows编译、安装和测试 2.1.编译环境准备 2.2.编译安装 2.2.1.安装FastCDR 2.2.2.安装Foonathan Memory 2.2.3.安装FastDDS 2.3.验证安装 3.Linux编译、安装和测试 3.1.编译环境准备 3.2.编译安装 3.2.1.安装FastCDR 3.2.2.安装Foonathan M…

NI USRP X410 无线电上的雷达目标仿真

此示例展示如何在 NI™ USRP™ 无线电的 FPGA 上部署雷达目标仿真算法。 介绍 在本例中,您将从 Simulink 模型入手,该模型可模拟最多四个雷达目标响应。您将按照分步指南,在 Simulink 中从该模型生成比特流,并使用生成的 MATLAB 主…

PyTorch 深度学习实战教程-番外篇04:卷积层详解与实战指南

标签:# 深度学习 #人工智能 #神经网络 #PyTorch #卷积神经网络 相关文章: 《Pytorch深度学习框架实战教程01》 《Pytorch深度学习框架实战教程02:开发环境部署》 《Pytorch深度学习框架实战教程03:Tensor 的创建、属性、操作与…

LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)

LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C_困难)题目描述:输入输出样例:题解:解题思路:思路一(贪心算法):代码实现代码实现(思路一(贪…

配置timer控制 IO的输出(STC8)

使用STC8的Timer控制IO输出 STC8系列单片机具有多个定时器,可以用于精确控制IO口的输出状态。以下是使用Timer0和Timer1控制IO输出的方法。 初始化Timer0 配置Timer0为16位自动重装模式,用于周期性控制IO输出: /************************ 定时…

【Python练习】086. 编写一个函数,实现简单的DHCP服务器功能

086. 编写一个函数,实现简单的DHCP服务器功能 086. 编写一个函数,实现简单的DHCP服务器功能 安装依赖库 示例代码 代码说明 示例输出 注意事项 扩展功能 DHCP服务器功能实现方法 依赖库安装 基本功能实现 功能说明 运行方法 注意事项 扩展功能 086. 编写一个函数,实现简单的…