c语言的编程风格

【FPGA教程案例59】深度学习案例6——基于FPGA的CNN卷积神经网络之整体实现 在课程,我们对的基本原理有了初步认识。在上一个课程,我们完成了CNN的Relu激活层、pool池化层、卷积层以及图像输入层的实现,如下图所示:在本课程中,我们将上述四个模块结合起来,构建一个简单的CNN卷积神经网络。... 阅读详情
c语言的编程风格

第一章:缩进格式

  Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!)的深度,这就象试图将PI定义为3一样让人难以接受.

  理由是:缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易.

  现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改你的程序.
  
总之,8个字符的缩进使得程序易读,还有一个附加的好处,就是它能在你将程序变得嵌套层数太多的时候给你警告.这个时候,你应该修改你的程序.

第二章:大符号的位置

  另外一个C程序编程风格的问题是对大括号的处理.同缩进大小不同,几乎没有什么理由去选择一种而不选择另外一种风格,但有一种推荐的风格,它是Kernighan和Ritchie的经典的那本书带来的,它将开始
的大括号放在一行的最后,而将结束大括号放在一行的第一位,如下所示:

  if (x is true) {

              we do y
        }
  
  然而,还有一种特殊的情况:命名函数:开始的括号是放在下一行的第一位,如下:
    int function(int x)
   {
         body of function
   }
  
  所有非正统的人会非难这种不一致性,但是,所有思维正常的人明白: (第一) K&R是对的,(第二)如果K&R不对,请参见第一条. (:-))......另外,函数也是特殊的,不一定非得一致.

  需要注意的是结束的括号在它所占的那一行是空的,除了它跟随着同一条语句的继续符号.如"while"在do-while循环中,或者"else"在if语句中.如下:

  do {
             body of do-loop
       } while (condition);
  以及
  if (x == y) {
              ..
        }
       else if (x > y) {
             ...
       }
       else {
           ....
       }

  理由: K&R.
  
  另外,注意到这种大括号的放置方法减小了空行的数量,但却没有减少可读性.于是,在屏幕大小受到限制的时候,你就可以有更多的空行来写些注释了.

第三章:命名系统

  C是一种简洁的语言,那么,命名也应该是简洁的.同MODULE-2以及PASCAL语言不同的是,C程序员不使用诸如ThisVariableIsATemporaryCounter之类的命名方式.一个C语言的程序员会将之命名为"tmp",这很容易书写,且并不是那么难以去理解.

  然而,当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了.调用一个名为"foo"全局的函数是很让人恼火的.全局变量(只有你必须使用的时候才使用它) ,就象全局函数一样,需要描述性的命名方式.假如你有一个函数用来计算活动用户的数量,你应该这样命名--"count_active_users()"--或另外的相近的形式,你不应命名为"cntusr()".

  有一种称为Hungarian命名方式,它将函数的类型编码写入变量名中,这种方式是脑子有毛病的一种表现---编译器知道这个类型而且会去检查它,而这样只会迷惑程序员. --知道为什么Micro$oft为什么会生产这么多"臭虫"程序了把!!.

  局部变量的命名应该短小精悍.假如你有一个随机的整数循环计数器,它有可能有"i",如果没有任何可能使得它能被误解的话,将其写作"loop_counter"是效率低下的.同样的,""tmp"可以是任何临时数值的函数变量.

第四章:函数

  函数应该短小而迷人,而且它只作一件事情.它应只覆盖一到两个屏幕(80*24一屏),并且只作一件事情,而且将它做好.(这不就是UNIX的风格吗,译者注).

  一个函数的最大长度和函数的复杂程度以及缩进大小成反比.于是,如果你已经写了简单但长度较长的的函数,而且你已经对不同的情况做了很多很小的事情,写一个更长一点的函数也是无所谓的.

  然而,假如你要写一个很复杂的函数,而且你已经估计到假如一般人读这个函数,他可能都不知道这个函数在说些什么,这个时候,使用具有描述性名字的有帮助的函数.

  另外一个需要考虑的是局部变量的数量.他们不应该超过5-10个,否则你有可能会出错.重新考虑这个函数,将他们分割成更小的函数.人的大脑通常可以很容易的记住7件不同的事情,超过这个数量会引起混乱.你知道你很聪明,但是你可能仍想去明白2周以前的做的事情.

第五章:注释

  注释是一件很好的事情,但是过多的注释也是危险的,不要试图区解释你的代码是注释如何如何的好:你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码.

  通常情况下,你的注释是说明你的代码做些什么,而不是怎么做的.而且,要试图避免将注释插在一个函数体里:假如这个函数确实很复杂,你需要在其中有部分的注释,你应该回到第四章看看.你可以写些简短的注释来注明或警告那些你认为特别聪明(或极其丑陋)的部分,但是你必须要避免过多.取而代之的是,将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做.

国债期货的日线趋势跟踪策略实现(基于backtrader框架) 通过backtrader框架,我们可以轻松地实现国债期货的日线趋势跟踪策略,并进行回测和验证。通过这种策略,我们可以尝试捕捉国债期货价格的短期趋势,并根据趋势的方向进行交易决策。backtrader提供了许多内置的指标、订单类型和其他功能,可以帮助你进一步优化和改进你的策略。它提供了丰富的工具和功能,使我们能够快速实现和验证我们的交易想法。方法中,我们根据当前价格和前一天的价格判断趋势的方向,并根据趋势的变化进行买入或卖出操作。然后,我们设置了初始资金和交易手续费,并将我们定义的策略。来跟踪每日的收盘价。 阅读详情

相关推荐

Kimi K3大模型API实战:从调用到本地知识库问答系统构建

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例

weixin_30694389的博客 297

C 语言编程风格

文章首发于 “物联网学前班” 公众号,关注查看更多精彩内容。 C 语言编程约定 此文为约定,并非规范,由自己的编程习惯总结而来。 文件字符编码 一切的前提。 强烈建议使用 UTF-8 编码格式。UTF-8 编码已经广泛应用在 WEB 中,是首选的编码格式。 UTF-8 编码是 Unicode 标准中的变长编码方式,可以表示 Unicode 中任意一个字符,使用1~4个字节表示字符,且字节顺序无关。统一使用 UTF-8 字符编码可以避免各种乱码问题的出现。 但是使用 UTF-8 编码格式的目的并不是为

嵌入式软件开发工程师 1679

Auto.js实战:从解锁手机到自动阅读的全流程避坑指南(MIUI系统适配版)

本文详细介绍了Auto.js在MIUI系统下的自动化操作全流程优化指南,包括设备唤醒、应用启动、界面交互等关键环节的实战技巧。特别针对MIUI系统的变速检测机制和电源管理策略,提供了有效的避坑方案和性能优化建议,帮助开发者实现从解锁手机到自动阅读的稳定运行。

醉三国 245

C语言 函数——代码风格

若采用匈牙利命名规则,则应写成//前缀i表示int类型//前缀f表示float类型。

hangweijie的博客 2946

灵魂三问:因果推断

什么是因果推断?为什么研究因果推断?怎么进行因果推断研究?

ML OR 智能决策的博客 2901

Synopys 验证系列-EDA 总结

VC Formal 解决方案包括一整套正式应用程序 (App),包括属性验证 (FPV)、自动提取属性 (AEP)、覆盖分析器 (FCA)、连接性检查 (CC)、时序等效性检查 (SEQ)、寄存器验证 (FRV)、测试平台分析仪 (FTA)、形式导航器 (NAV) 以及用于验证标准总线协议的一组断言 IP (AIP)。

qq_41289491的博客 1421

推荐的C编程风格(干货)

1. 推荐的C编程风格 本文档是根据Tilen MAJERLE的推荐的C编程规则整理而来。添加配合Doxygen相关的注释,可实现生成注释文档。纯干货,整理出来内容挺多的,建议收藏慢慢看。 2. 通用规则 这里列出来一些必要并重要的通用规则 使用c99标准 使用空格,尽量别使用制表符 使用4个空格代表一个缩进 在功能名称和左括号之间尽量别使用空格 int a = sum(4, 3); ...

weixin_44544923的博客 1005

直流电源EMI滤波器设计实战:从器件选型到PCB布局的完整指南

本文提供了一份直流电源EMI滤波器的完整实战设计指南。针对EMI噪声超标问题,文章深入剖析了差模与共模噪声的抑制原理,详细讲解了从电路拓扑、核心器件(如X/Y电容、共模电感)的选型计算,到决定性能成败的PCB布局艺术。重点强调了低阻抗路径、干净接地及输入输出隔离等关键布局原则,并分享了常见的调试坑点与排查方法,旨在帮助硬件工程师设计出真正有效的滤波器,确保电源系统通过EMC测试。

q9r0s的博客 641

浅谈C与C++的设计与编程风格(二)

上次总结了C++(面向对象)设计的核心思想,并且例举了使用类模型来替代if和switch的一种较为典型的情况。下面想来谈谈C++在编码方面的特点。在很多经典的C++教程中都有一个建议:应尽量使用户代码(库的使用者)看起来短小而简单。按照常识,简单的代码通常要比大段的代码好理解,而用户代码通常实现的是最上层的功能或者界面,它的不确定性更大,经验告诉我们,最容易出错的代码正是那些被频繁修改的代码!因此

程海拾遗 662

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

当启动容器的时候提示:exec format error?如何解决问题

Docker容器出现"exec format error"的主要原因是架构不兼容(如ARM设备运行x86镜像)。解决方案包括:1)匹配镜像与宿主机架构;2)构建时指定平台;3)安装QEMU模拟器;4)修复文件权限和格式;5)验证基础镜像兼容性。排查流程应从检查架构匹配开始,逐步验证权限、解释器和换行符等问题。建议优先使用多架构镜像,构建时明确指定平台,并使用buildx工具生成多平台镜像。调试时可进入容器手动验证文件格式和兼容性。

weixin_39291964的博客 2716

oracle 触发器执行ddl,在Oracle的触发器中执行DDL语句

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句。解决办法有两种:1.在可以在触发器中加入:pragma autonomous_transacti...

weixin_30195669的博客 693

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

在Oracle的触发器中执行DDL语句

触发器无需commit也不能写commit触发器和触发它的DML是同一个事务DML提交了,触发器的操作也提交了,要不就一起回滚了当然,如果你一定要在触发器里写COMMIT那就用自治事务相当于一个事务里的子事务正常情况下,Oracle规定在触发器中不能运行 ddl语句和commit,rollback语句。 解决办法有两种: 1.在可以在触发器中加入:pragma autonomous_t

技术收藏 3998

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

oracle 禁用ddl,使用DDL触发器禁止DDL语句的执行

使用DDL触发器禁止DDL语句的执行create or replace trigger deny_ddlbefore create or alter or drop or truncate on databasedeclarel_errmsg varchar2(100):= 'You are not allowed to take this operation';beginif ora_sysev...

weixin_30054883的博客 447

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Oracle 触发器详解

可以在触发器体的语句块中使用 inserting、updating、deleting谓词,这些谓词会返回相应的DML操作的布尔值,如果为true,则表示执行了相应的insert、update、delete操作。new谓词:执行后的字段的值的名称,比如update一个表时,使用:new.columnname是指执行 update操作之后的列的值。old谓词:执行前的字段的值的名称,比如update一个表时,使用:old.columnname是指执行update操作之前的列的值。

KevinChen2019的博客 1万+

oracle 查询ddl记录,Oracle记录用户DDL操作脚本

Oracle记录用户DDL操作脚本 --当前普通用户创建 issgzt create table TAB_DDL ( LOGIN_USER VARCHAR2(60), AUDSOracle记录用户DDL操作脚本--当前普通用户创建 issgztcreate table TAB_DDL(LOGIN_USER VARCHAR2(60),AUDSID NUMBER...

weixin_34420941的博客 2681

Oracle中的DDL触发器

在日常应用中最常见的是DML触发器,关于DML触发器可以参考文章Oracle中的DML触发器 DDL触发器由数据定义语句(比如CREATE、DROP语句等)触发。 DDL触发器的应用场景 为了防止因恶意攻击或者用户误操作而导致删除数据表,我们可以在系统日常运行时禁止执行某些数据库命令,比如DROP TABLE语句。 DDL触发器可以用于监控和防止针对数据库对象的修改命令。 DDL触发器的应用示例 禁止进行数据库表的修改和删除操作 CREATE OR REPLACE TRIGG

每天学习一点点 2808

Oracle基础知识(六) - 触发器的分类:DDL触发器

1. 什么是DDL触发器 当执行DDL语句时会被触发。 2. 分类 按照作用范围,分为schema triggers,database triggers。schema triggers作用在一个用户上,database triggers作用在整个数据库所有用户上。

什么是江湖? 1781

Oracle触发器及使用举例(几种触发器类型)

触发器 触发器的触发事件分类: 执行DDM语句;执行DDL语句;引发数据库系统事件;引发用户事件; 创建触发器的语法 CREATE TRIGGER 触发器名 [before|after|instead of] 触发事件 on 表名或者视图名或者用户名或者数据库名 [for each row] [触发条件表达式] [declare 变量] begin sentences; end 触发器名; 注意:...

weixin_41649106的博客 3226

Oracle使用触发器禁止远程DDL操作

SQL> grant select on v_$session to zhongwc; Grant succeeded. SQL> grant execute on dbms_system to zhongwc; Grant succeeded. SQL> @ddl_trigger Trigger created. SQL> !cat ddl_trigger.sql cre

Zhong Weicheng Study Notes 2373

oracle触发器为什么不打印,ORACLE 触发器里面执行建表语句不成功,求解!!!...

ORACLE 触发器里面执行建表语句不成功,求解!!!关注:186答案:3手机版解决时间 2021-01-30 11:08提问者北墓南笙2021-01-29 13:49代码如下:Create Or Replace Trigger Trg_InsUpdDel_testAfter Insert or update or deleteon TESTfor each rowdeclarev_str...

weixin_34221374的博客 291

oracle限制ddl,限制DDL操作(一)

出于安全性或避免影响性能的考虑,在产品数据库中有时候会禁止或者在一定时间段内限制DDL语句的发生。Oracle也提高了很多方法来实现这个功能,这个简单介绍一下。这篇介绍利用触发器来限制DDL语句。利用触发器来限制DDL,可能是最容易想到的功能。利用Oracle的DDL触发器,在DDL语句执行之前RAISE_APPLICATION_ERROR,可以有效的限制DDL语句。下面这个例子就可以禁止数据库中...

weixin_32090653的博客 905

Oracle触发器

文章目录一、触发器的概念二、DML触发器1、语句触发器2、行级触发器3、DML触发器语法4、触发器谓词5、示例三、DDL触发器1、DDL触发器语法2、DDL事件3、可用属性4、示例四、替代触发器五、系统触发器1、数据库启动(startup)2、数据库关闭(shutdown)3、新建会话(logon)4、注销会话(logoff)5、servererror6、db_role_change六、版权声明 ...

C语言实战技术 409

Oracle开发之触发器调用存储过程

转载原文地址:http://blog.youkuaiyun.com/zftang/article/details/6586996 大家都知道触发器是无需commit的,而且也不能写commit;触发器和触发它的DML是同一个事务 DML提交了,触发器的操作也提交了,所以无需Commit;否则就会造成错误信息。 当然,如果你一定要在触发器里写COMMIT,那也是可以的,可以用Oracle中的自治事务来处理

whuarui2010的专栏 8543

创建一个指定IP才能执行DDL语句的触发器

create or replace trigger T_sys_config_ddl_refuse_trig before ddl on schema declare v_ipaddress varchar2(20); begin select sys_context('userenv','ip_address') into v_ipaddress from dual...

weixin_34152820的博客 144
下一篇: 网络基础知识
spry97
博客等级 码龄23年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值