王者荣耀语句(王者荣耀语句翻译)
12192023-08-26
很多朋友对于E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊和为什么不建议用inline不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
本文目录
在C++中优先使用String是一个良好的习惯。除非是C的死忠者习惯如此,否则应该使用String而不是char。
char是用来处理任何8bit数据类型的,逻辑值、整数、字符ASCII码等都可以。要用来处理字符串需要使用char[]数组,比较麻烦,也不好控制。
String是一个模板类,它是专门用来处理字符串的,封装了很多处理字符串的成员函数。并且它是C++标准库的一部分,是所有C++实现都支持的,也是C++创始人推荐使用的。
术业有专攻,应该用哪一个不难选择吧。
因为a标签的默认display方式是inline,不属于用户可设置高宽的块级元素。建议修改style为
后面两个加*的style是为了兼容早期版本的IE。因为早期版本IE不支持inline-block属性。如果只是单纯修改style为block,等于在a标签前后插入了换行符,可能违背了你的初衷。谢邀。
C语言中的define宏定义可以像函数那样接收参数(这种宏定义常被称作“函数式宏定义”),不过不能像函数那样提供参数的类型检查,这个特点在有些程序员看来是不安全的。
C语言中的“函数式宏定义”但是,函数式宏定义不关心参数类型这个特点,有时候也会被利用起来,写出一些适用性更广的C语言代码,例如:
上面这段C语言宏定义代码实现了一个max()方法,它接收两个参数,并返回较大的那个参数,max()方法不关心参数的类型,因此__a和__b可以是int型的,也可以是char型或者double型以及其他数据类型的。
如果使用max()方法提供的功能以C语言函数的方式来写,就稍显麻烦些了,程序员不得不为每一种数据类型实现一个max()函数。更加糟糕的是,C语言并不支持函数的重载,因此max()这个函数名一旦被使用,其他函数就不能再使用了,因此相关的C语言代码可能是下面这样的:
这样对比起来,显然使用define宏来定义max()方法更加方便一些。不过,C语言中的宏定义不提供参数类型检查的确也是一个缺点,它可能会导致程序的不安全,读者不应忽视这一点。因此如果不是必须要使用define宏定义才能解决问题,应该尽可能的使用函数,若是希望能够得到较高效率的代码,可以使用inline函数。
关于inline函数,我之前的文章较为详细的讨论过。
使用C语言中宏定义的注意事项C语言中的“函数式宏定义”虽然使用起来很像函数,但它实际上并不是函数,读者千万不能忽视这一点,不然可能会写出具有隐患,甚至严重错误的C语言程序。请看下面这个例子:
上面这段C语言代码编译并执行,会输出什么呢?
在main()函数中,变量a和b都被初始化为2。接着调用了max()宏,传递的参数分别是++a和b,粗略来看,此时执行max(++a,b),就相当于执行max(3,2),那上面这段C语言程序会输出3,2,3了?得到答案最简单粗暴的方法就是编译并执行这段代码,请看:
没有经验的读者看到实际输出估计会大吃一惊,a和m怎么不是3而是4呢?并没有第二处给a再加一啊?上一节曾讨论,编译器会将C语言中的宏定义展开到被调用处,而不是像函数那样编译后,再通过call指令调用。使用gcc-E命令查看编译器将上述C语言代码预处理后的代码,得到如下结果,请看:
显然,这里就是C语言中“函数式宏定义”的注意事项了,传递给max()的参数++a会被展开到宏定义中所有的__a处,这就解释了为何a和m最后都等于4而不是3了。
“函数式宏定义”还有其他与真正函数不同的地方,例如“函数式宏定义”就不适合用于递归等。
使用do{}while(0)包裹代码尽管C语言中的“函数式宏定义”和真正的函数相比有一些缺点,但只要小心使用还是会显著提高代码的执行效率的,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作。正因为如此,Linux内核中有相当多的方法是使用define宏定义实现的,并且,在内核C语言代码中,“函数式宏定义”经常借助do{}while(0)实现,例如:
为什么要用do{}while(0)包裹C语言代码呢?不使用do{}while(0)包裹起来有什么不好吗?请看下面这几行C语言代码:
宏定义被编译器展开后,会产生下面这样的C语言代码:
这可能就与程序员的意图不一致了,这种情况下__release(lock);并没有在if(cond)的作用范围内。可能读者会说,那像函数一样,使用{}包裹代码不就可以了吗?请再来看看下面这几行C语言代码:
问题就出在spin_unlock(lock);后面的这个分号“;”,如果不写就不像函数调用,如果写了就会引发语法错误——if语句会被这个“;”提前结束,else无法与其配对。这么看来,在C语言的“函数式宏定义”中使用do{}while(0)包裹C语言代码显然就是一个不错的方法了。
小结“函数式宏定义”并不是真正的函数,它与真正的函数是有区别的,如果弄不清楚这一点,很容易迷惑。在最后,我们一起分析了常用do{}while(0)包裹宏定义的代码的原因,读者今后在C语言程序开发中,也可以使用该技巧。
欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。
你好,你可以使用if语句来判定,根据正确结果来确定feedback的activestate就是了,当然这种我建议你直接做一个slide来反馈更好。另外需要e-prime程序示例可以在e-prime吧交流分享。
E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊和为什么不建议用inline的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!