当前位置: 首页 > news >正文

30岁学网站开发农业生态园电商网站建设

30岁学网站开发,农业生态园电商网站建设,黑龙江省建设银行 招聘网站,长宁区网站建设写在前面#xff1a; 本系列专栏主要介绍C语言的相关知识#xff0c;思路以下面的参考链接教程为主#xff0c;大部分笔记也出自该教程。除了参考下面的链接教程以外#xff0c;笔者还参考了其它的一些C语言教材#xff0c;笔者认为重要的部分大多都会用粗体标注#xf…  写在前面 本系列专栏主要介绍C语言的相关知识思路以下面的参考链接教程为主大部分笔记也出自该教程。除了参考下面的链接教程以外笔者还参考了其它的一些C语言教材笔者认为重要的部分大多都会用粗体标注未被标注出的部分可能全是重点可根据相关部分的示例代码量和注释量判断或者根据实际经验判断。如有错漏欢迎指出。 参考教程C语言程序设计从入门到进阶【比特鹏哥c语言2024完整版视频教程】c语言基础入门c语言软件安装C语言指针c语言考研C语言专升本C语言期末计算机二级C语言c语言_哔哩哔哩_bilibili 一、程序环境及编译链接 1、程序的翻译环境和执行环境 在ANSI C的任何一种实现中存在两个不同的环境 1第1种是翻译环境在这个环境中源代码被转换为可执行的机器指令。 2第2种是执行环境它用于实际执行代码。 2、翻译环境下的工作 1组成一个程序的每个源文件通过编译过程分别转换成目标代码object code每个目标文件由链接器linker捆绑在一起形成一个单一而完整的可执行程序。 2链接器同时也会引入标准C函数库中任何被该程序所用到的函数而且它可以搜索程序员个人的程序库将其需要的函数也链接到程序中。 3、编译本身分为几个阶段 1预处理预编译预处理完成之后就停下来预处理之后产生的结果都放在test.i文件中。把#include包含的文件全部拷贝进文件注释全部删除#define全部代入替换 2编译经过语法分析、词法分析、语义分析和符号汇总把在全局中的符号汇总比如全局变量名及函数名把C代码转换成汇编代码编译完成之后就停下来结果保存在test.s中。 3汇编汇编完成之后就停下来结果保存在test.o中。把汇编代码转换为二进制/机器指令利用编译阶段符号汇总的结果形成符号表 4最后还要进行链接包括合并段表以及符号表的合并和符号表的重定位如上图sum有两个地址重定位会在其中选取一个有效的地址然后进行合并然后生成可执行程序.elf。 4、程序执行的过程 1程序必须载入内存中。 ①在有操作系统的环境中一般这个由操作系统完成。 ②在独立的环境中程序的载入必须由手工安排也可能是通过可执行代码置入只读内存来完成。 2程序的执行开始——调用main函数。 3开始执行程序代码这个时候程序将使用一个运行时堆栈stack存储函数的局部变量和返回地址程序同时也可以使用静态static内存存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。 4终止程序——正常终止main函数也有可能是意外终止。 二、预处理一 1、C语言内置的预定义符号 __FILE__      //进行编译的源文件 __LINE__     //文件当前的行号 __DATE__    //文件被编译的日期 __TIME__    //文件被编译的时间 __STDC__    //如果编译器遵循ANSI C其值为1否则未定义 2、#define 定义标识符 1用#define指令指定一个符号名称例如PI代表一个常量例如3.1415这个常量就是符号常量它不占内存在预编译后这个符号就不存在了。 2经过#define的指定后文件从该行开始所有的PI都代表3.1415对程序进行编译前预处理器先对PI进行处理把代码中所有PI全部置换为3.1415在预编译后符号常量就全部变成了字面常量3.1415。 3“#define 定义标识符”的好处 ①含义清楚。 ②在需要改变程序中多出用到的同一个常量时能做到“一改全改”非常方便。 4#define指令不止可以定义符号常量它可以把一大段内容比如一个函数的调用用一个简短的标识符代替对程序进行编译前预处理器会将代码中出现过的这个简短的标识符全部替换成那一大段内容。 5举例 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #define MAX 1000 #define reg register          //为 register这个关键字创建一个简短的名字 #define do_forever for(;;)     //用更形象的符号来替换一种实现 #define CASE break;case        //在写case语句的时候自动把 break写上。 // 如果定义的 stuff过长可以分成几行写除了最后一行外每行的后面都加一个反斜杠(续行符)。 #define DEBUG_PRINT printf(file:%s\tline:%d\tdate:%s\ttime:%s\n ,\__FILE__,__LINE__ ,\__DATE__,__TIME__ )int main() {DEBUG_PRINT;return 0; } 3、#define 定义宏 1#define 机制包括了一个规定它允许把参数替换到文本中这种实现通常称为宏macro或定义宏define macro。 #define name( parament-list ) stuff ①其中parament-list是一个由逗号隔开的符号表它们可能出现在stuff中。 ②参数列表的左括号必须与name紧邻如果两者之间有任何空白存在参数列表就会被解释为stuff的一部分。 ③stuff中的参数以及整个stuff最好都加括号这是为了防止运算符优先级引发若干问题。 ④在代码中使用定义的宏函数时格式为“name(parament-list)”。 2举例 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #define SQUARE(x) ((x) * (x)) //整个表达式以及每个参数最好都加括号int main() {int a 5;printf(%d\n, 10 * SQUARE(a 1));//printf(%d\n, 10 * ((a 1) * (a 1)));return 0; } 4、#define 的替换规则 1在调用宏时首先对参数进行检查看看是否包含任何由#define定义的符号如果是它们首先被替换。 2替换文本随后被插入到程序中原来文本的位置。对于宏参数名被它们对应的值替换。 3最后再次对结果文件进行扫描看看它是否包含任何由#define定义的符号如果是就重复上述处理过程。 4需要注意的是 ①宏参数和#define 定义中可以出现其他#define定义的变量但是对于宏不能出现递归。 ②当预处理器搜索#define定义的符号的时候字符串常量的内容并不会被搜索。 5、#和## 1使用“#”可以把一个宏参数变成对应的字符串具体方法是在stuff中的字符串参数的首部双撇号内添加一个“#”。 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h#define PRINT(FORMAT, VALUE)(printf(the value of #VALUE is FORMAT \n, VALUE))int main() {int i 1;PRINT(%d, i 3);return 0; } 2使用“##”可以把位于它两边的符号合成一个符号它允许宏定义从分离的文本片段创建标识符。 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h#define ADD_TO_SUM(num, value) (value##num)int main() {int sum ADD_TO_SUM(5, 10);printf(%d\n, sum);//105return 0; } 6、带副作用的宏参数 1当宏参数在宏的定义中出现超过一次的时候如果参数带有副作用那么在使用这个宏的时候就可能出现危险导致不可预测的后果。 2举例 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #define MAX(a, b) ( (a) (b) ? (a) : (b) )int main() {int x 5;int y 8;int z MAX(x, y);//z ( (x) (y) ? (x) : (y));printf(x%d y%d z%d\n, x, y, z); //x6 y10 z9return 0; } 7、宏函数和普通函数的对比 1用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多所以宏比函数在程序的规模和速度方面更胜一筹。 2更为重要的是函数的参数必须声明为特定的类型所以函数只能在类型合适的表达式上使用反之宏可以适用于整形、长整型、浮点型等可以用于来比较的类型宏是类型无关的。 3当然和函数相比宏也有劣势的地方 ①每次使用宏的时候一份宏定义的代码将插入到程序中除非宏比较短否则可能大幅度增加程序的长度。 ②宏是没法调试的。 ③宏由于类型无关也就不够严谨。 ④宏可能会带来运算符优先级的问题导致程容易出现错。 4宏有时候可以做函数做不到的事情比如宏的参数可以出现类型但是函数做不到。 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #include stdlib.h #define MALLOC(num, type)\ (type *)malloc(num * sizeof(type))int main() {//使用MALLOC(10, int);//类型作为参数//预处理器替换之后//(int *)malloc(10 * sizeof(int));return 0; } 8、#undef 这条指令用于移除一个宏定义使用方式如下。 #undef NAME         //如果现存的一个名字需要被重新定义那么它的旧名字首先要被移除。 三、预处理二 1、条件编译 1在编译一个程序的时候如果要将一条语句一组语句编译或者放弃是很方便的因为C语言有条件编译指令。 2调试性的代码比如用printf输出一些中间变量删除可惜保留又碍事这时就可以选择性地编译。 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #define __DEBUG__int main() {int i 0;int arr[10] { 0 };for (i 0; i 10; i){arr[i] i; #ifdef __DEBUG__printf(%d\n, arr[i]);//为了观察数组是否赋值成功。 #endif //__DEBUG__}return 0; } 3常见的条件编译指令 ①单个分支的条件编译 #if 常量表达式 //... #endif //常量表达式由预处理器求值其逻辑和一般的if语句相同表达式结果不为零即编译其下的内容 如 #define __DEBUG__ 1 #if __DEBUG__ //.. #endif ②多个分支的条件编译 #if 常量表达式 //... #elif 常量表达式 //... #else //... #endif ③判断是否被定义 #if defined(symbol) #ifdef symbol        //如果有用#define定义symbol #if !defined(symbol) #ifndef symbol       //如果没有用#define定义symbol这条指令常用于防止头文件被重复包含 //这四条指令都需接#endif ④嵌套指令 #if defined(OS_UNIX) #ifdef OPTION1 unix_version_option1(); #endif #ifdef OPTION2 unix_version_option2(); #endif #elif defined(OS_MSDOS) #ifdef OPTION2 msdos_version_option2(); #endif #endif       //每条条件编译指令都需要配对一个“#endif” 2、offsetof宏的实现 #define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h #include stddef.h //使用offsetof需要包含此头文件//写一个宏计算结构体中某变量相对于首地址的偏移并给出说明 #define OFFSETOF(type,member) (size_t)(((type*)0)-member)struct S {char c1;int i;char c2; }; int main() {struct S s { 0 };printf(%d\n, OFFSETOF(struct S, c1));printf(%d\n, OFFSETOF(struct S, i));printf(%d\n, OFFSETOF(struct S, c2));return 0; }
http://www.tj-hxxt.cn/news/227382.html

相关文章:

  • 网站后台登录系统是怎么做的网站后台系统
  • 建设网站需要分析什么条件宜昌网站建设市场
  • wordpress 换空间 换域名上海seo顾问推推蛙
  • 网站开发应注意哪些问题网站建设内容大全
  • 做美食类网站分析郑州网站建设公司排行
  • php网站下载asp 网站运行
  • 长春网站建设方案详细外贸网站关键词优化
  • 推广网站弄哪家好wordpress的菜单功能
  • 捡个校花做老婆是哪个网站的app设计网站推荐
  • 怎么做好网站开发_设计知名网站制作企业
  • 广元网站建设专业人员做粘土网站
  • 网站现状分析做网站接口多少钱
  • 建设工程质量检测机构主管网站wordpress怎么添加注册
  • 深圳电器公司怎么样昆明seo技术培训
  • 百度云做.net网站怎么做推广和宣传企业做网站
  • 怎样在工商网站做遗失网站建设公司如何营销
  • 创意聊城做网站的公司深圳约的网站设计
  • wordpress企业建站微信应用程序开发
  • 怎么加快网站打开速度浙江温州乐清
  • 网站图解图片是用什么软件做的凡科网站怎么做
  • 做网站多久能学会快对小程序入口
  • 淘宝网站开发实训报告目录WordPress唯美个人博客主题
  • 百度网站域名注册c 开发商城网站开发
  • 手机端网站怎么做seoseo去哪学
  • 清远专业网站建设服务网站建设合同用贴印花税吗
  • 学校部门网站建设总结功能型网站有哪些
  • 河西网站建设优化seo温州知名网站
  • 备案的网站是公司吗郑州seo技术
  • 网站转应用王烨乐清
  • 上海工程建设造价信息网站烟台网站制作效果