[Expert C Programming] Notes (二)

本文提炼了C编程中的关键概念和技巧,包括NULL的正确使用、const关键字的理解、switch语句的陷阱、函数可见性的控制、优先级规则、fgets的安全替代、结构声明优化、参数传递机制及枚举的优势。

<<Expert C Programming>> Notes (一)

这本书的精华实在太多了,呵呵,只能在精华部分再提取精华。当然下面的内容也不全是书上的,包含着自己的思想在里面.

第一条:一个‘L’的NULL和两个‘L’的NULL

请牢记这两句话:

一个‘L’的NUL用于结束一个ACSII字符串

两个‘L’的NULL用于表示什么也不指向(空指针)

................................................................................................

第二条:const关键字并不真正表示常量,如下面的一段程序:

const int two =2;   
    switch(i)   
    {   
        case 1:printf("case 1/n");   break;
        case two:printf("case 2/n");   break;
        case 3:printf("case 3/n");   break;
        default:;   
    }
上面的代码将产生一个编译错误,这并不是switch本身的过错,但这程序反应了const其实并不是真正的常量。

另外关于switch的“fall through”缺省采用,在97%情况下都是错误的!

...............................................................................................

第三条:关于switch中的break!


code()   
    {   
        switch(line)   
        {   
            case h:doit();   
            break;   
            case h2:   
                if(x == STUFF)   
                {   
                    do_first_stuff();   
                    if(y == OTHER_STUFF)   
                    {   
                        break;   
                    }   
                    do_later_stuff();   
                }/*想跳到这边*/  
                 initialize_modes_pointer();//这条语句就不会执行了
                break;   
                default:   
                 do_something();   
        }   
        /*事实上跳到这边*/  
           
    }

上面的代码其实是滥用break的结果!在这边可以用goto或者把那条语句取反就可以了

................................................................................................

 第四条:使一段代码第一次执行时的行为与以后执行时不同


generate_initialized(char * string)   
    {   
        static char separator=' ';   
        printf("%c %s/n", separator, string);   
        separator = ',';   
    }

上面的程序,“第一次执行的前面加个空格”相比“最后一次执行,省略逗号后缀”对程序而言更简单了

................................................................................................

第五条:太多的缺省可见性!

定义C函数时,在缺省的情况下函数的名字是全局可见的,可以在函数的名字前加个冗余的extern关键字,但是如果想要限制这个函数的访问,就必须加个static关键字,如:

extern functuon pear() (/*在任何地方均可见*/)

static  functuon pear() (/*在这个文件之外不可见*/)

.................................................................................................

第六条:其实在变成中只要记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他的操作符时一律加上括号!

.................................................................................................

第七条:用fgets()彻底取代gets()。fgets()函数对读入的字符数设置了一个限制,这样就不会超出缓冲区范围。应该把gets (line);


if(fgets(line,sizeof(line),stdin)==NULL) exit(1);
................................................................................................. 

第八条:关于结构的声明和变量的定义

一般的定义方式为:

struct veg{int weight,price_per; } onion,radish,turnip;

而比较容易阅读的方式为:

structure veg {int weight,price_per};   
struct veg onion,radish,turnip;
..............................................................................................

第九条:参数在传递时首先尽可能的存放于寄存器中(追求速度)。int型变量i跟只包含一个int型成员的结构变量s在参数传递时方式可能完全不同。一个int型参数一般会被传递到寄存器中,而结构参数则很可能被传递到堆栈中。

................................................................................................

第十条:枚举具有一个优点:#define定义的名字一般在编译时被丢弃,而枚举名字则通常一直在调试器中可见,可以在调试代码时使用它们





原文链接: http://blog.csdn.net/crazyjixiang/article/details/6466075

转载于:https://my.oschina.net/chen106106/blog/51165

内容概要:本文深入研究了基于最优滑模控制的永磁同步电机(PMSM)调速系统模型,重点利用Simulink工具搭建并仿真了该控制系统的动态响应特性。文章系统阐述了最优滑模控制策略的设计原理,突出其在削弱传统滑模控制固有抖振现象、增强系统鲁棒性方面的显著优势。通过与传统滑模控制方法的对比实验,充分验证了所提出方法在调速精度、抗外部干扰能力以及动态响应速度等方面的优越性能。研究内容涵盖PMSM数学建模、滑模面构造、最优控制律推导、Lyapunov稳定性分析、参数整定及Simulink仿真验证等完整环节,形成了一套严谨的控制算法设计与实现流程。; 适合人群:具备自动控制原理、现代控制理论基础和MATLAB/Simulink仿真操作能力,从事电机驱动控制、电力电子与电力传动、运动控制或自动化等相关领域研究的工程技术人员及高校研究生。; 使用场景及目标:① 深入掌握滑模控制理论及其在高性能电机调速系统中的具体应用方法;② 学习如何设计并实现能够有效抑制抖振的最优滑模控制器,以提升系统整体鲁棒性和控制品质;③ 利用Simulink平台独立完成从理论建模到仿真验证的全过程,服务于科研课题、课程设计或实际工程项目。; 阅读建议:建议读者务必结合MATLAB/Simulink环境动手复现文中模型,重点关注滑模切换面的设计准则、控制律的数学推导过程以及控制器参数的调节规律,并通过施加不同的负载扰动、设定多种转速指令等方式全面测试系统的动态与稳态性能,从而深刻理解最优滑模控制的核心机理与工程应用价值。
内容概要:本文提出了一种基于数据驱动的Koopman算子与递归神经网络(RNN)相结合的模型线性化方法,旨在解决纳米定位系统中因强非线性、迟滞和蠕变效应导致的建模困难问题。该方法通过Koopman算子将非线性动态系统映射至高维线性空间,利用RNN学习系统的时间序列演化特征,从而实现对复杂动态行为的精确建模与预测,并进一步集成于模型预测控制(MPC)框架中,显著提升了纳米定位系统的控制精度、动态响应能力与运行稳定性。整个算法体系在Matlab平台上完成代码实现与仿真实验验证,展示了良好的控制性能与工程应用潜力。; 适合人群:具备控制理论、非线性系统建模、机器学习及智能控制基础,从事精密仪器控制、高端制造装备研发、自动化系统设计等领域的研究生、科研人员及工程技术开发者。; 使用场景及目标:①应对扫描探针显微镜、光刻机、超精密加工平台等纳米级定位设备中的非线性建模挑战;②提升高精度运动系统的实时预测控制性能,抑制迟滞与蠕变带来的定位误差;③为数据驱动的非线性系统线性化与先进控制策略(如MPC)的融合提供可复现、可扩展的技术范例。; 阅读建议:建议读者结合提供的Matlab代码,深入理解Koopman观测矩阵构造、RNN网络训练流程及MPC控制器设计之间的协同机制,重点关注数据预处理、特征提取、模型训练与闭环控制仿真的完整链路,以便在相似高精度控制系统中进行迁移与优化应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值