E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊

投稿- 2023-08-20 17:52:00

E prime中通过语句实现一些控件不能实现的功能

很多朋友对于E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊和为什么不建议用inline不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

本文目录

  1. 在C++编程中,领导坚持用char而不用string,string有那么可怕吗
  2. Html中标签a是内联元素吗为什么可以设置宽和高
  3. C语言的宏定义用起来有什么要注意的为什么很多宏用do{}while(0)包围
  4. E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊

在C++编程中,领导坚持用char而不用string,string有那么可怕吗

在C++中优先使用String是一个良好的习惯。除非是C的死忠者习惯如此,否则应该使用String而不是char。

char是用来处理任何8bit数据类型的,逻辑值、整数、字符ASCII码等都可以。要用来处理字符串需要使用char[]数组,比较麻烦,也不好控制。

String是一个模板类,它是专门用来处理字符串的,封装了很多处理字符串的成员函数。并且它是C++标准库的一部分,是所有C++实现都支持的,也是C++创始人推荐使用的。

术业有专攻,应该用哪一个不难选择吧。

Html中标签a是内联元素吗为什么可以设置宽和高

因为a标签的默认display方式是inline,不属于用户可设置高宽的块级元素。建议修改style为

后面两个加*的style是为了兼容早期版本的IE。因为早期版本IE不支持inline-block属性。如果只是单纯修改style为block,等于在a标签前后插入了换行符,可能违背了你的初衷。

C语言的宏定义用起来有什么要注意的为什么很多宏用do{}while(0)包围

谢邀。

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等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊

你好,你可以使用if语句来判定,根据正确结果来确定feedback的activestate就是了,当然这种我建议你直接做一个slide来反馈更好。另外需要e-prime程序示例可以在e-prime吧交流分享。

E-prime中,如果两个控件中有一个为错,则feedback显示为错误的inline语句应该怎么写啊和为什么不建议用inline的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

急求助 怎么都装不上e prime
  • 声明:本文内容来自互联网不代表本站观点,转载请注明出处:bk.0755org.com/12/101314.html
上一篇:etf份额多好还是少好
下一篇:dom存储是什么(dom是哪种基本的数据结构)
相关文章
返回顶部小火箭