The missing lecture in C learning

文章目录

  • main()
    • main的参数
    • main的返回值
    • 递归的main
    • 替换main
    • 起点?
    • main函数三种写法
  • 编译器
  • Debug调试
  • 未定义行为 (Undefined behavior)
  • 编译、链接、运行

main()

main函数也是函数,也有返回值、形参,也能递归调用等等等

main的参数

#incldue <stdio.h>int main(int argc, char* argv[]) {for(int i = 0; i < argc; i ++) {printf("arg%d  :  %s", i, argv[i]);}return 0;
}
/* 
rm arg
make arg 
*/

main的返回值

递归的main

#include <stdio.h>int a = 1;
int b = 1;
int temp = 0;int main(void) {if(b < 500) {temp = b;b += a;a = temp;printf("b = %d\n", b);main();}return 0;
}
/*
rm recursion
make recursion
*/

替换main

#include <stdio.h>
#include <stdlib.h>int main(int a, int b) {return a + b;
} int myfun(void) {printf("hello\n");int a = main(1,1);printf("a = %d\n", a);exit(0);
}
/*
rm main
make main
*/

起点?

main函数三种写法

int main(void) {}
int main(int argc, char* argv[]) {} /* 当然argc和argv是可以改成别的名字的*/
main() {} //不推荐
int main() {} //不推荐

编译器

c89
c2x
但是不同编译器会对C语言标准进行拓展,比如增加一些“特性”或者关键词。

  • clang
    特征检查宏,_Nullable和_Nonnull,函数重载,Blocks语法
  • gcc
    零长数组,语句表达式,内建函数,__attribute__属性,范围case
  • Keil C51
    data, code, bit, sbit, sfr, reentrant

Debug调试

#include <stdio.h>
int main(void) {printf("hello");while(1);return 0;
}
#include <stdio.h>
void copy(char*, char*);
int main(void) {char string1[10] = "hello";char string2[256] = "some words in string2";char string3[256] = "world \nPS : string1 will get \"world\" and string2 stay still";copy(string1, string3);printf("%s\n\n\n%s",string1,string2);return 0;
}
void copy(char* s1, char* s2) {for(unsigned char i = strlen(s1); i >= 0; i--) {s1[i] = s2[i];}return ;
}
#include <stdio.h>
int main(void) {int year = 0;if(year % 4 = 0)if(year % 100 != 0)printf("yes\n");elseprintf("no\n");return 0;
}
#include <stdio.h>
int main(void) {int n;char* string;scanf("%d", &n);string = (int*)malloc();
}
#include <stdio.h>
#include <stdlib.h>void fun(void);int main() {while(1) {fun();}return 0;
}void fun(void) {char* buf = (char*)malloc(512);int key_value = 0;scanf("%d", &key_value);switch(key_value) {case 1 ... 5: /* deal with something */free(buf);return ;default :printf("error key num\n");return ;}
}

添加链接描述

未定义行为 (Undefined behavior)

对于相同的程序,不同的编译环境、编译器编译出来的结果也不一定相同。
这叫未指定行为 (Unspecified behavior)

程序行为并未在 语言规范 (在 C 中,自然是 ISO/IEC 9899 一类的规格) 所明确定义规范。缩写为 “UB”。

undefined behavior (UB) is the result of executing a program whose behavior is prescribed to be unpredictable, in the language specification to which the computer code adheres.

UB

  • 数组越界
  • 解引用空指针
  • 未初始化的局部变量
  • 除以零
  • 符号溢出
  • 位移操作数太大

编译、链接、运行

  • 怎么从.c.exe
    添加链接描述

  • 变量的值是怎么初始化的
    添加链接描述

  • .exe是怎么运行起来的
    添加链接描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

第100+25步 ChatGPT学习:概率校准 Histogram Binning

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…

ATT&CK靶机实战系列之vulnstack2

声明: 本文章只是用于网络安全交流与学习&#xff0c;若学者用学到的东西做一些与网络安全不相关的事情&#xff0c;结果均与本人无关&#xff01;&#xff01;&#xff01; 靶场环境: 使用kali作为hacker的攻击机器&#xff0c;来对web pc dc进行攻击。 这里声明一下: 关于…

三、jsp与Listener监听器

文章目录 1. 什么是 jsp&#xff0c;它有什么用?2. jsp 的本质是什么3. jsp 的三种语法3.1 jsp 头部的 page 指令3.2 jsp 中的常用脚本3.3 jsp 中的三种注释 4. jsp 九大内置对象5. jsp 四大域对象6. jsp 中的 out 输出和 response.getWriter 输出的区别7. jsp 的常用标签7.1 …

Linux shell编程学习笔记81:zcat命令——快速查看压缩文件内容

0 引言 在 Linux shell编程学习笔记80&#xff1a;gzip命令——让文件瘦身-CSDN博客https://blog.csdn.net/Purpleendurer/article/details/141862213?spm1001.2014.3001.5501中&#xff0c;我们使用gzip命令可以创建压缩文件。那么&#xff0c;我们可以使用zcat命令来查看压…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

SPI软件模拟读写W25Q64

1.SPI初始化 #include "stm32f10x.h" // Device headervoid MySPI_W_SS(uint8_t BitValue)//片选 {GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)BitValue); }void MySPI_W_SCK(uint8_t BitValue)//时钟线 {GPIO_WriteBit(GPIOA,GPIO_Pin_5,(BitAct…

LabVIEW提高开发效率技巧----使用事件结构优化用户界面响应

事件结构&#xff08;Event Structure&#xff09; 是 LabVIEW 中用于处理用户界面事件的强大工具。通过事件驱动的编程方式&#xff0c;程序可以在用户操作时动态执行特定代码&#xff0c;而不是通过轮询&#xff08;Polling&#xff09;的方式不断检查界面控件状态。这种方式…

鸿蒙 ArkUI组件三

ArkUI组件&#xff08;续&#xff09; QRCode组件 用于显示单个二维码的组件。 说明 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。二维码组件的像素点数量与内容有关&#xff0c;当组件尺寸过小时&#xff0c;可能…

Kettle的实战练习指南:从数据导入到ETL自动化

在数据集成和数据仓库建设中&#xff0c;Kettle作为一个强大的开源ETL工具&#xff0c;提供了灵活的数据抽取、转换和加载功能。本文将通过实战案例&#xff0c;详细介绍Kettle在数据导入、ETL流程设计、自动化任务调度等方面的应用。 一、数据导入 1. SQL语句导入 导入sql语…

(11)(2.1.2) DShot ESCs(二)

文章目录 前言 3 配置伺服功能 4 检查RC横幅 5 参数说明 前言 DShot 是一种数字 ESC 协议&#xff0c;它允许快速、高分辨率的数字通信&#xff0c;可以改善飞行器控制&#xff0c;这在多旋翼和 quadplane 应用中特别有用。 3 配置伺服功能 如上所述&#xff0c;如果使用…

数据结构-3.链表

前言 本篇博客给大家带来的是链表的知识点, 其中包括面试经常会提问的真题 ArrayList 和 LinkedList 的区别 . 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条, 如果分享不成功, 那我就会回你一下,那样你就分享成…

c++与cmake:完整的C++项目构建注意事项

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 最近常常使用cmake构建c项目有感,从创建项目到打包发布总结一下需要注意的事情. 项目组织方式 具体的项目组织方式因人而异,这里推荐一种,在src目录中创建模块目录,再在include目录中常见对应的同名目录包含头文件,…

阿里巴巴API助力电商:商品详情获取与数据驱动的完美结合

阿里巴巴API在电商领域的应用&#xff0c;特别是在商品详情获取与数据驱动的决策过程中&#xff0c;发挥着至关重要的作用。以下是对这一主题的详细阐述&#xff1a; 一、阿里巴巴API在商品详情获取中的应用 丰富的数据支持&#xff1a; 阿里巴巴提供的商品详情API&#xff0…

html详细知识

1-标题标签、水平线、字体标签 <!--1.标题标签1&#xff09;格式&#xff1a;<hn></hn> n的范围是1-6&#xff0c;依次递减2&#xff09;标题标签特点&#xff1a;a:单独占一行b:自动加粗2.水平线1&#xff09;格式&#xff1a;<hr/>2)属性&#xff1a;…

深度学习对抗海洋赤潮危机!浙大GIS实验室提出ChloroFormer模型,可提前预警海洋藻类爆发

2014 年 8 月&#xff0c;美国俄亥俄州托莱多市超 50 万名居民突然收到市政府的一则紧急通知——不得擅自饮用自来水&#xff01; 水是人类生存的基本供给&#xff0c;此通告关系重大&#xff0c;发出后也引起了不小的恐慌。究其原因&#xff0c;其实是美国伊利湖爆发了大规模…

如何使用ssm实现在线视频网站开发

TOC ssm631在线视频网站开发jsp 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到如今的计算机&#xff0…

关于嵌入式硬件需要了解的基础知识

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于嵌入式硬件基础知识的相关内容&#xff…

html,css基础知识点笔记(二)

9.18&#xff08;二&#xff09; 本文主要教列表的样式设计 1&#xff09;文本溢出 效果图 文字限制一行显示几个字&#xff0c;多余打点 line-height: 1.8em; white-space: nowrap; width: 40em; overflow: hidden; text-overflow: ellipsis;em表示一个文字的大小单位&…

828华为云征文|云服务器Flexus X实例|Ubunt部署Vue项目

概要 本章将深入阐述Vue项目在Ubuntu环境下&#xff0c;实现在华为云Flexus X云服务器上的部署过程&#xff0c;此次演示以Vue.js项目为核心华为云在已经到来的828 B2B企业节上&#xff0c;为Vue等前端项目的部署与运维提供强有力的支持。 Ubuntu部署Vue项目的影响&#xff1…

VS Code远程连接虚拟机

VS Code远程连接虚拟机 1.下载vscode2.打开VS Code下载Remote-SSH插件1.修改相关信息 3.虚拟机检查或安装ssh4.检查虚拟机服务是否安装成功5.开启ssh&#xff0c;并检查是否开启成功 1.下载vscode 2.打开VS Code下载Remote-SSH插件 1.修改相关信息 2. 3.虚拟机检查或安装ssh…