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

美食网站建设的栏目和模板西安自助网站建设系统

美食网站建设的栏目和模板,西安自助网站建设系统,国内网站空间购买,免费做图片的网站目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1.  修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例 六、总结 接上一篇https://blog.csdn.net/weixin_37800531/article/details/145430862?sharetypeblogdetailsharerId145430862sharereferPCsharesourceweixin_37800531spm1011.2480.3001.8118继续分析。 一、auto 在C语言中auto 关键字用于修饰局部变量尽管在实际编程中我们往往省略这个关键字因为局部变量默认就是自动存储类型auto的。auto 关键字的主要作用是显式地表明变量的存储类型并帮助程序员更好地理解代码。 1.1. 作用 修饰局部变量表明该变量是自动存储类型的。虽然通常省略但在某些情况下显式使用 auto 可以提高代码的可读性。 1.2. 特性 自动分配内存当函数被调用时auto 变量会在栈上自动分配内存。自动释放内存当函数返回时auto 变量所占用的内存会自动释放变量失效。生命周期auto 变量的生命周期仅限于定义它的函数或代码块内。 1.3. 代码示例 虽然auto关键字通常被省略但以下示例可以展示其用法 #include stdio.h void myFunction() { auto int myAutoVar 10; // 显式使用 auto 关键字但通常可以省略 printf(Value of myAutoVar: %d\n, myAutoVar); // myAutoVar 在这里有效但函数返回后将自动释放内存 } int main() { myFunction(); // printf(Value of myAutoVar: %d\n, myAutoVar); // 错误myAutoVar 在这里无效 return 0; } myAutoVar 是一个 auto 类型的局部变量它在 myFunction 函数内部被定义并初始化。当 myFunction 被调用时myAutoVar 会在栈上分配内存。当 myFunction 返回时myAutoVar 所占用的内存会自动释放变量失效。因此在 main 函数中尝试访问 myAutoVar 会导致编译错误。 运行结果  需要注意的是由于局部变量默认就是 auto 类型的所以在实际编程中我们通常会省略 auto 关键字。 二、register 在C语言中register 关键字用于向编译器提出建议希望编译器能够将特定的变量存储在CPU的寄存器中以便提高对该变量的访问速度。寄存器是CPU内部的一种高速存储单元其访问速度远快于内存。因此如果某个变量被频繁地读取且不会被修改那么将其存储在寄存器中可以显著提高程序的性能。 2.1. 作用 register 关键字的主要作用是向编译器发出建议希望编译器能够优化变量的存储位置将其从内存移动到寄存器中。然而需要注意的是这只是一个建议编译器并不一定会采纳。编译器会根据自身的优化策略、寄存器的可用性以及变量的使用情况来决定是否将变量存储在寄存器中。 2.2. 特性 适用于频繁读取且不会被修改的局部变量由于寄存器的数量有限且读写寄存器需要消耗一定的CPU资源因此register关键字最适合用于那些被频繁读取且不会被修改的局部变量。 编译器可能会忽略此建议如前所述register只是一个建议编译器并不一定会采纳。编译器会根据实际情况来决定是否将变量存储在寄存器中。 不能用于全局变量和静态变量由于全局变量和静态变量在程序的整个生命周期内都有效且可能会被多个函数访问和修改因此它们不适合存储在寄存器中。 2.3. 代码示例 下面是一个使用register关键字的简单示例 #include stdio.h void count_loops(int n) { register int i; // 建议编译器将i存储在寄存器中 for (i 0; i n; i) { // 循环体为空仅用于演示 } printf(Loop count: %d\n, i); // 此时i的值应为n } int main() { count_loops(1000000); // 调用函数传入一个较大的值以演示效果 return 0; } 使用了register关键字来建议编译器将循环变量i存储在寄存器中。然而需要注意的是编译器可能会忽略这个建议并将i存储在内存中。此外即使编译器采纳了这个建议由于寄存器的数量有限如果程序中使用了大量的register变量那么编译器也可能无法将它们全部存储在寄存器中。  运行结果 在使用register关键字时我们需要保持谨慎并意识到它只是一个建议而不是一个强制性的要求。同时我们还需要通过实际的性能测试来验证编译器是否采纳了我们的建议并评估其对程序性能的影响。  三、static 在C语言中static 关键字有多种用途包括修饰局部变量、全局变量和函数。 3.1.  修饰局部变量 当static修饰局部变量时它会延长该变量的生命周期至整个程序运行期间但变量的作用域仍然保持不变即只能在定义它的函数或代码块内部访问。意味着即使函数执行完毕该变量的值也会保留下来供下次函数调用时使用。 代码示例 #include stdio.h void functionWithStaticVar() { static int count 0; // 静态局部变量只在第一次调用时初始化 count; printf(Count: %d\n, count); } int main() { functionWithStaticVar(); // 输出Count: 1 functionWithStaticVar(); // 输出Count: 2 functionWithStaticVar(); // 输出Count: 3 return 0; } count是一个静态局部变量。每次调用functionWithStaticVar函数时count的值都会递增并且在下次函数调用时保留下来。 实际运行结果  3.2. 修饰全局变量 当static修饰全局变量时它会限制该变量的作用域使其只能在定义它的文件内部访问。有助于避免不同文件之间的命名冲突。 代码示例 // file1.c #include stdio.h static int globalVar 100; // 静态全局变量只能在file1.c内部访问 void printGlobalVar() { printf(GlobalVar in file1.c: %d\n, globalVar); } // file2.c #include stdio.h // 尝试访问file1.c中的globalVar会导致编译错误 // extern int globalVar; // 注释掉这行以避免编译错误 // void printGlobalVarFromFile2() { // printf(GlobalVar in file2.c: %d\n, globalVar); // 这行会导致链接错误 // } int main() { // printGlobalVarFromFile2(); // 注释掉这行以避免编译错误 printGlobalVar(); // 调用file1.c中的函数来打印globalVar return 0; } globalVar是一个静态全局变量它只能在file1.c内部访问。如果尝试在file2.c中访问它会导致编译或链接错误。 3.3. 修饰函数 当static修饰函数时它会使该函数只能在定义它的文件内部使用防止外部链接。有助于隐藏函数的实现细节减少命名冲突的可能性。 代码示例 // file1.c #include stdio.h static void internalFunction() { printf(This is an internal function in file1.c\n); } void externalFunction() { internalFunction(); // 调用内部函数 printf(This is an external function in file1.c\n); } // file2.c #include stdio.h // 尝试调用file1.c中的internalFunction会导致链接错误 // void callInternalFunction() { // internalFunction(); // 这行会导致链接错误 // } int main() { externalFunction(); // 调用file1.c中的外部函数 // callInternalFunction(); // 注释掉这行以避免链接错误 return 0; } internalFunction是一个静态函数它只能在file1.c内部使用。如果尝试在file2.c中调用它会导致链接错误。而externalFunction是一个外部函数它可以在其他文件中被调用。 四、extern 在C语言编程中extern 关键字扮演着至关重要的角色它允许我们声明在其他文件中定义的变量或函数从而实现跨文件的资源共享。这是模块化编程的基础使得我们可以将程序拆分为多个文件每个文件负责特定的功能或数据结构然后在需要时通过 extern 声明来访问这些外部定义的资源。 4.1. 作用 extern 关键字的主要作用是声明一个变量或函数是在其他文件中定义的这样在当前文件中就可以访问到这个变量或函数。它是实现跨文件链接和访问的关键机制。 4.2. 特性 跨文件访问extern 允许我们访问在其他文件中定义的变量或函数。声明顺序在使用 extern 声明的变量或函数之前编译器需要知道它们的存在。因此extern 声明通常放在文件的开头部分或者在变量或函数被实际使用之前。模块化编程extern 是模块化编程的基础使得我们可以将程序拆分为多个独立的文件每个文件都可以定义自己的变量和函数并通过 extern 声明来访问其他文件中的资源。 4.3. 代码示例 下面是一个简单的示例展示如何使用 extern 关键字来实现跨文件访问变量和函数。 file1.c #include stdio.h // 定义一个全局变量 int globalVar 42; // 定义一个函数 void printGlobalVar() { printf(GlobalVar in file1.c: %d\n, globalVar); } file1.h // 在头文件中使用 extern 来声明 file1.c 中定义的变量和函数 extern int globalVar; extern void printGlobalVar(); file2.c #include stdio.h #include file1.h // 包含 file1.c 的头文件以访问其声明的变量和函数 int main() { // 访问 file1.c 中定义的全局变量 printf(Accessing globalVar from file2.c: %d\n, globalVar); // 调用 file1.c 中定义的函数 printGlobalVar(); return 0; } file1.c 定义了一个全局变量 globalVar 和一个函数 printGlobalVar()。然后在 file1.h 中使用 extern 关键字来声明这些变量和函数以便在其他文件中访问它们。最后在 file2.c 中我们包含了 file1.h 头文件从而能够访问 file1.c 中定义的变量和函数。 通过这种方式我们可以将程序拆分为多个文件每个文件负责特定的功能或数据结构然后通过 extern 声明和头文件来实现跨文件的资源共享和访问。这是模块化编程的核心思想之一。 五、volatile volatile 关键字在C/C等编程语言中用于告诉编译器某个变量的值可能会在程序的控制流之外被改变。这通常发生在硬件访问、多线程编程或中断服务程序中。使用 volatile 可以防止编译器对该变量进行优化从而确保每次访问该变量时都能读取其最新的值。 5.1. 作用 防止优化编译器在优化代码时可能会将变量的值缓存在寄存器中以减少对内存的访问。如果变量被声明为 volatile编译器就不会进行这种优化而是每次访问该变量时都直接从内存中读取其值。 硬件访问在嵌入式系统编程中volatile 常用于访问硬件寄存器的值。这些寄存器的值可能会由硬件本身或其他外部设备改变因此需要使用 volatile 来确保每次都能读取到最新的值。 多线程编程在多线程环境中一个线程可能会修改另一个线程中的变量。虽然C/C标准并没有将 volatile 定义为线程之间的同步机制但在某些平台上使用 volatile 可以防止编译器对共享变量的优化从而增加线程间通信的可靠性尽管这不是跨平台或标准的方法通常应使用同步原语如互斥锁。 中断服务程序在中断服务程序中全局变量的值可能会由中断处理程序改变。使用 volatile 可以确保主程序在访问这些变量时能够读取到最新的值。 5.2. 代码示例 示例1硬件寄存器访问 #include stdint.h // 假设有一个硬件寄存器的地址是0x40000000 #define HARDWARE_REGISTER *((volatile uint32_t *)0x40000000) int main() { // 读取硬件寄存器的值 uint32_t value HARDWARE_REGISTER; // 对寄存器进行写操作 HARDWARE_REGISTER 0xDEADBEEF; // 再次读取寄存器的值 value HARDWARE_REGISTER; return 0; } HARDWARE_REGISTER 是一个宏它定义了一个指向硬件寄存器地址的 volatile 指针。确保了每次访问 HARDWARE_REGISTER 时都会直接从硬件寄存器中读取或写入值。 示例2多线程编程中的共享变量 #include stdio.h #include pthread.h #include unistd.h // 注意这不是跨平台或标准的方法来实现线程间同步 volatile int shared_variable 0; void *thread_function(void *arg) { // 模拟一些工作 sleep(1); // 修改共享变量的值 shared_variable 1; return NULL; } int main() { pthread_t thread; pthread_create(thread, NULL, thread_function, NULL); // 等待线程完成工作 while (shared_variable 0) { // 这里可能会进行忙等待但这不是推荐的做法 // 在实际应用中应该使用条件变量、信号量等同步原语 } printf(Shared variable has been changed by the thread.\n); pthread_join(thread, NULL); return 0; } shared_variable 是一个 volatile 变量它在多线程环境中被共享。虽然 volatile 在这里可以防止编译器对 shared_variable 的优化但它并不能保证线程之间的同步。在实际应用中应该使用互斥锁、条件变量等同步原语来确保线程之间的正确同步。 volatile 并不提供原子性保证即它不能保证对 volatile 变量的读写操作是原子的。在多线程环境中即使使用了 volatile也可能需要额外的同步机制来确保对共享变量的正确访问。 六、总结 C语言共有32个关键字。这些关键字根据作用可以分为以下四类 数据类型关键字12个用于声明变量的数据类型。包括char、double、float、int、long、short、signed、unsigned、struct、union、enum、void等。控制语句关键字12个用于控制程序的流程。包括for、do、while、break、continue、if、else、goto、switch、case、default、return等。存储类型关键字4个或5个用于声明变量的存储类型。常见的包括auto、extern、static、register等有时也将typedef视为存储类型关键字的一种尽管其主要功能是为数据类型取别名。其他关键字3个或4个包括const声明只读变量、sizeof计算数据类型长度、volatile说明变量在程序执行中可被隐含地改变有时不包括typedef因其主要功能是数据类型定义。 这些关键字在C语言编程中具有重要的作用是构成C语言程序的基本元素之一。掌握这些关键字的使用方法和注意事项对于学习C语言和进行C语言编程至关重要。
http://www.zqtcl.cn/news/22386/

相关文章:

  • 桂林做手机网站襄阳住房和城乡建设局网站首页
  • 哈尔滨模板做网站wordpress英文主题怎么用
  • 车床加工东莞网站建设关键词优化下拉管家
  • 银行需要网站开发人员嘛网站数据没有更新
  • 建设一个网站平台的费用吗嘉兴市南湖区建设街道网站
  • 做网站 徐州临床推广的方式有哪些
  • 郑州网站建设喝彩做非法网站
  • 海口本地网站百度收录情况查询
  • 电商网站建设文献建个地方门户网站要多少钱
  • 建设银行申请信用卡网站首页西宁网站建设电话
  • 计算机网站开发方向多个网站建站
  • 盐城网站建设多少钱百度联盟怎么加入赚钱
  • 一个软件app关键字优化工具
  • 网站如何做前后端分离领导不愿意做招聘网站怎么办
  • 想做个网站不知道怎么做精品网络小说
  • 松江做移动网站设计海珠做网站
  • 模具培训网站建设做外国网站买域名
  • 在线教育网站有哪些网站如何减少404跳转
  • 什么是网站内链自己做了一个网站
  • 南京 郑州网站建设公司 网络服务杭州微网站开发公司
  • 滕州网站建设培训wap网站seo
  • 电脑自己做网站可以吗网站seo优化很好徐州百都网络点赞
  • 深圳+服装+网站建设wordpress获取指定分类
  • 厨具网站模板郑州企业健康码
  • 好学校平台网站模板下载不了外贸出口公司网站建设方案
  • wordpress网站如何添加栏目中国十大管理咨询公司排名
  • 360网站运营关键词网站
  • 免费推广网站平台排名手机网页版浏览器
  • 微信公众网站怎么做的wordpress 载入慢
  • 家居企业网站建设平台企业网站开发合同