肺部有阴影是什么原因| 刺青是什么意思| ova什么意思| 直肠前突有什么症状| 白色玉米是什么玉米| 白头发多吃什么食物能变黑| 副业做什么比较好| 婉甸女装属于什么档次| 飞亚达手表什么档次| 梦见自己开车是什么意思| 谷字五行属什么| 红牛什么时候喝效果好| 1980年属什么| 明天属什么生肖| 三月十八是什么星座| 女人吃黄芪有什么好处| 示字旁与什么有关| 梭织棉是什么面料| 命名是什么意思| 魂牵梦绕是什么意思| 1967属什么生肖| 足字旁的字和什么有关| 爱打扮的女人说明什么| 愚孝什么意思| 梦见一个小男孩是什么意思| 精索静脉曲张吃什么药| 眉目比喻什么| 孝喘吃什么药好| id是什么意思的缩写| 截瘫是什么意思| 红丝带的含义是什么| 什么是六道轮回| 7月15什么星座| 霉菌性阴道炎用什么药好得快| 8月11日是什么星座| 焦虑抑郁吃什么药| 血糖高吃什么食物最好最佳| 手心痒是什么原因| 痰涎壅盛是什么意思| 吃什么能增加免疫力| 明矾是什么| 吃什么食物补阳气| 耋是什么意思| 3885是什么罩杯| 集成灶什么品牌最好| 什么肠小道成语| 手上的月牙代表什么意思| 第一次查怀孕挂什么科| 骨髓穿刺是检查什么病| 外聘是什么意思| 舅父是什么意思| 稽留流产是什么原因| 石榴木命是什么意思| 手腕有痣代表什么| 莫桑钻和钻石有什么区别| 成人礼送什么礼物| 孔雀的尾巴有什么作用| 儿童身高矮小挂什么科| 为什么一直咳嗽| 相濡以沫是什么意思| pcp是什么意思| 一月出生是什么星座| 泥鳅什么人不能吃| 耄耋什么意思| 标的是什么| 什么人不能喝绿豆汤| 澳大利亚说什么语| 王景读什么| 开眼镜店需要什么设备| 白带拉丝是什么原因| 胸口有痣代表什么意思| 防晒衣什么颜色最防晒| 打嗝不停吃什么药| 痔疮复发的原因是什么| 库克是什么| 能力是什么意思| 凌晨一点多是什么时辰| 俄罗斯特工组织叫什么| 3月13日是什么星座| 结婚25年属于什么婚| 亚五行属什么| 发痧吃什么药可以断根| 平起平坐是什么动物| 妇科臭氧治疗的作用是什么| 什么的故事填空| 脑脊液白细胞高是什么原因| 午睡后头疼是什么原因| 权字五行属什么| orf是什么意思| 小孩子隔三差五流鼻血什么原因| 鼠和什么属相相冲| 鱼扣是鱼的什么部位| 为什么一热身上就痒| 女性腰肌劳损吃什么药| 杠杆是什么意思| 伏羲女娲是什么关系| 最短的季节是什么| 特需门诊和专家门诊有什么区别| 螨虫长什么样子图片| 核磁和ct有什么区别| 维生素d3什么牌子好| 车前草有什么功效和作用| 西安属于什么省| 就藩什么意思| 夏天脚开裂是什么原因| 异地补办身份证需要什么手续| 随性是什么意思| 儿童口臭什么原因引起的| 频发室性早搏是什么意思| 梦见自己疯了什么意思| 井底之蛙是什么意思| 星座之王是什么座| 结肠炎挂什么科| 生快是什么意思| 降息是什么意思| 萎缩性胃炎吃什么药最好| 波字五行属什么| 蜜蜂是什么牌子| plus是什么意思| 金骏眉是什么茶类| 什么叫生酮| 女人梦到蛇预示着什么| 皮肤挂什么科| 垂询是什么意思| 心什么气什么| 大长今是什么意思| 火六局是什么意思| 腰痛是什么原因| 灿字五行属什么| 尿痛吃什么药效果最好| 不现实什么意思| 吃什么补钾最快| 骨穿是检查什么的| 0a是什么意思| 乳痈是什么病| 什么样的女孩容易招鬼| 1959属什么生肖| 做梦梦到男朋友出轨了是什么意思| 盐酸左氧氟沙星片治什么病| 喉咙痒咳嗽有痰是什么原因| 牙痛吃什么药好| bpc是什么意思| 下午五六点是什么时辰| hpf是什么意思| cro是什么意思| 吃狗肉有什么危害| 搬家送什么| 总手是什么意思| 幻觉妄想状态是什么病| 原发性高血压是什么意思| 馄饨皮可以做什么美食| 难以启齿什么意思| 酸梅是什么水果| 咽炎吃什么药最好效果| 择日是什么意思| 哭夫痣是什么意思| 三丧日是什么意思| 孕妇羊水少吃什么补的快| 玄关是什么意思| spyder是什么品牌| 疝囊是什么| 冰藤席是什么材质| 2011是什么年| 早上八点到九点属于什么时辰| 为什么说黑鱼是鬼| 减肥吃什么肉类| 胃酸多吃什么药| 宫颈萎缩意味着什么| 海石花是什么| 高半胱氨酸是什么意思| 剖腹产什么时候可以洗澡| 一什么叮咛| 胃胀想吐是什么原因| prr是什么意思| 遣返回国有什么后果| 精索静脉曲张挂什么科| 战五渣是什么意思| 醋酸纤维是什么面料| apc是什么| 目不暇接的意思是什么| 新生儿便秘怎么办什么方法最有效| 尿电导率低是什么意思| 脸部爱出油是什么原因| 早搏的症状是什么表现| 宠物医院需要什么资质| 猪润是什么| 白带多是什么情况| 为什么会长鸡眼| 指甲发紫是什么原因| 国师是什么职位| f什么意思| 血脂高能吃什么水果| 什么的绿叶| hbeab阳性是什么意思| 头眩晕是什么原因引起的| 吃饭后胃疼是什么原因| 海鲜菇不能和什么一起吃| 规格是指什么| 4.19是什么星座| 不可磨灭是什么意思| 吲达帕胺片是什么药| 心什么| cns是什么意思| 慢性非萎缩性胃炎吃什么药效果好| c反应蛋白偏高是什么原因| 逍遥丸有什么作用| 拉稀水是什么原因| 肠胃炎挂什么科| 黄精和什么泡水喝最好| 喝酒对身体有什么好处和坏处| 3.15什么星座| 雨露均沾是什么意思| 脾胃阴虚吃什么中成药| 虾仁炒什么菜好吃| 肚子大挂什么科| 心脏疼吃什么药效果好| 尿道刺痛吃什么药| 胃溃疡吃什么食物| 拍身份证照片穿什么衣服| 知鸟吃什么| 身体缺糖有什么症状| 什么是辐射| 暴力熊是什么牌子| 嘴唇上长疱疹用什么药| 瓜子脸剪什么发型好看| 滨海新区有什么好玩的地方| 一望无际是什么意思| hmo是什么| 开团什么意思| 冬至为什么吃水饺| 螺旋体感染是什么意思| 男怕穿靴女怕戴帽什么意思| 清考是什么意思| 什么是静电| b型血为什么招蚊子| alcon是什么牌子| 尽收眼底是什么意思| 子宫内膜手术后需要注意什么| 肺热会引起什么症状| 子宫息肉有什么危害| 巡抚相当于现在的什么官| 玉字五行属什么| 宝宝入盆有什么感觉| mru是什么检查| 股票五行属什么| 脸发红发痒是什么原因| butterfly什么意思| 家里出现蛇是什么征兆| 粉瘤是什么东西| 扁桃体2度是什么意思| 晚上肚子疼是什么原因| 二垒是什么意思| 每个月月经都提前是什么原因| tvb是什么| 女人白带多什么原因| 烤油边是什么| 中风吃什么药好| 日希是什么字| 手指甲上有竖纹是什么原因| 小肚子胀痛什么原因| 一个点念什么| 白蛋白低有什么症状| 什么是cpi| 后羿射日什么意思| 百度Jump to content

裂帛是什么意思

From Wikipedia, the free encyclopedia
百度 有的人是阴虚肺燥咳嗽,就可以用;有的人则可能是肺热咳嗽,以痰热咳嗽为主,肺燥不明显。

In computer programming languages, a switch statement is a type of selection control mechanism used to allow the value of a variable or expression to change the control flow of program execution via search and map.

Switch statements function somewhat similarly to the if statement used in programming languages like C/C++, C#, Visual Basic .NET, Java and exist in most high-level imperative programming languages such as Pascal, Ada, C/C++, C#,[1]:?374–375? Visual Basic .NET, Java,[2]:?157–167? and in many other types of language, using such keywords as switch, case, select, or inspect.

Switch statements come in two main variants: a structured switch, as in Pascal, which takes exactly one branch, and an unstructured switch, as in C, which functions as a type of goto. The main reasons for using a switch include improving clarity, by reducing otherwise repetitive coding, and (if the heuristics permit) also offering the potential for faster execution through easier compiler optimization in many cases.

An example of a switch statement in C
switch (age) {
  case 1:  printf("You're one.");            break;
  case 2:  printf("You're two.");            break;
  case 3:  printf("You're three.");
  case 4:  printf("You're three or four.");  break;
  default: printf("You're not 1, 2, 3 or 4!");
}

History

[edit]

In his 1952 text Introduction to Metamathematics, Stephen Kleene formally proved that the CASE function (the IF-THEN-ELSE function being its simplest form) is a primitive recursive function, where he defines the notion "definition by cases" in the following manner:

"#F. The function φ defined thus

φ(x1 , ... , xn ) =
  • φ1(x1 , ... , xn ) if Q1(x1 , ... , xn ),
  • . . . . . . . . . . . .
  • φm(x1 , ... , xn ) if Qm(x1 , ... , xn ),
  • φm+1(x1 , ... , xn ) otherwise,

where Q1 , ... , Qm are mutually exclusive predicates (or φ(x1 , ... , xn) shall have the value given by the first clause which applies) is primitive recursive in φ1, ..., φm+1, Q1, ..., Qm+1.

—?Stephen Kleene, [3]

Kleene provides a proof of this in terms of the Boolean-like recursive functions "sign-of" sg( ) and "not sign of" ~sg( ) (Kleene 1952:222-223); the first returns 1 if its input is positive and ?1 if its input is negative.

Boolos-Burgess-Jeffrey make the additional observation that "definition by cases" must be both mutually exclusive and collectively exhaustive. They too offer a proof of the primitive recursiveness of this function (Boolos-Burgess-Jeffrey 2002:74-75).

The IF-THEN-ELSE is the basis of the McCarthy formalism: its usage replaces both primitive recursion and the mu-operator.

The earliest Fortran compilers supported the computed GOTO statement for multi-way branching. Early ALGOL compilers supported a SWITCH data type which contains a list of "designational expressions". A GOTO statement could reference a switch variable and, by providing an index, branch to the desired destination. With experience it was realized that a more formal multi-way construct, with single point of entrance and exit, was needed. Languages such as BCPL, ALGOL-W, and ALGOL-68 introduced forms of this construct which have survived through modern languages.

Typical syntax

[edit]

In most languages, programmers write a switch statement across many individual lines using one or two keywords. A typical syntax involves:

  • the first select, followed by an expression which is often referred to as the control expression or control variable of the switch statement
  • subsequent lines defining the actual cases (the values), with corresponding sequences of statements for execution when a match occurs
  • In languages with fallthrough behavior, a break statement typically follows a case statement to end said statement. [Wells]
  • In some languages, e.g., PL/I, the control expression is optional; if there is no control expression then each alternative begins with a WHEN clause containing a Boolean expression and a match occurs for the first case for which that expression evaluates to true. This usage is similar to the if/then/elseif/else structures in some other languages, e.g., Perl.
  • In some languages, e.g., Rexx, no control expression is allowed and each alternative begins with a WHEN clause containing a Boolean expression and a match occurs for the first case for which that expression evaluates to true.

Each alternative begins with the particular value, or list of values (see below), that the control variable may match and which will cause the control to goto the corresponding sequence of statements. The value (or list/range of values) is usually separated from the corresponding statement sequence by a colon or by an implication arrow. In many languages, every case must also be preceded by a keyword such as case or when.

An optional default case is typically also allowed, specified by a default, otherwise, or else keyword. This executes when none of the other cases match the control expression. In some languages, such as C, if no case matches and the default is omitted the switch statement simply does nothing. In others, like PL/I, an error is raised.

Semantics

[edit]

Semantically, there are two main forms of switch statements.

The first form are structured switches, as in Pascal, where exactly one branch is taken, and the cases are treated as separate, exclusive blocks. This functions as a generalized if–then–else conditional, here with any number of branches, not just two.

The second form are unstructured switches, as in C, where the cases are treated as labels within a single block, and the switch functions as a generalized goto. This distinction is referred to as the treatment of fallthrough, which is elaborated below.

Fallthrough

[edit]

In many languages, only the matching block is executed, and then execution continues at the end of the switch statement. These include the Pascal family (Object Pascal, Modula, Oberon, Ada, etc.) as well as PL/I, modern forms of Fortran and BASIC dialects influenced by Pascal, most functional languages, and many others. To allow multiple values to execute the same code (and avoid needing to duplicate code), Pascal-type languages permit any number of values per case, given as a comma-separated list, as a range, or as a combination.

Languages derived from C language, and more generally those influenced by Fortran's computed GOTO, instead feature fallthrough, where control moves to the matching case, and then execution continues ("falls through") to the statements associated with the next case in the source text. This also allows multiple values to match the same point without any special syntax: they are just listed with empty bodies. Values can be special conditioned with code in the case body. In practice, fallthrough is usually prevented with a break keyword at the end of the matching body, which exits execution of the switch block, but this can cause bugs due to unintentional fallthrough if the programmer forgets to insert the break statement. This is thus seen by many[4] as a language wart, and warned against in some lint tools. Syntactically, the cases are interpreted as labels, not blocks, and the switch and break statements explicitly change control flow. Some languages influenced by C, such as JavaScript, retain default fallthrough, while others remove fallthrough, or only allow it in special circumstances. Notable variations on this in the C-family include C#, in which all blocks must be terminated with a break or return unless the block is empty (i.e. fallthrough is used as a way to specify multiple values).

In some cases languages provide optional fallthrough. For example, Perl does not fall through by default, but a case may explicitly do so using a continue keyword. This prevents unintentional fallthrough but allows it when desired. Similarly, Bash defaults to not falling through when terminated with ;;, but allows fallthrough[5] with ;& or ;;& instead.

An example of a switch statement that relies on fallthrough is Duff's device.

Compilation

[edit]

Optimizing compilers such as GCC or Clang may compile a switch statement into either a branch table or a binary search through the values in the cases.[6] A branch table allows the switch statement to determine with a small, constant number of instructions which branch to execute without having to go through a list of comparisons, while a binary search takes only a logarithmic number of comparisons, measured in the number of cases in the switch statement.

Normally, the only method of finding out if this optimization has occurred is by actually looking at the resultant assembly or machine code output that has been generated by the compiler.

Advantages and disadvantages

[edit]

In some languages and programming environments, the use of a case or switch statement is considered superior to an equivalent series of if else if statements because it is:

  • Easier to debug (e.g. setting breakpoints on code vs. a call table, if the debugger has no conditional breakpoint capability)
  • Easier for a person to read
  • Easier to understand, and consequently easier to maintain
  • Fixed depth: a sequence of "if else if" statements may yield deep nesting, making compilation more difficult (especially in automatically generated code)
  • Easier to verify that all values are handled. Compilers can issue a warning if some enum values are not handled.

Additionally, an optimized implementation may execute much faster than the alternative, because it is often implemented by using an indexed branch table.[7] For example, deciding program flow based on a single character's value, if correctly implemented, is vastly more efficient than the alternative, reducing instruction path lengths considerably. When implemented as such, a switch statement essentially becomes a perfect hash.

In terms of the control-flow graph, a switch statement consists of two nodes (entrance and exit), plus one edge between them for each option. By contrast, a sequence of "if...else if...else if" statements has an additional node for every case other than the first and last, together with a corresponding edge. The resulting control-flow graph for the sequences of "if"s thus has many more nodes and almost twice as many edges, with these not adding any useful information. However, the simple branches in the if statements are individually conceptually easier than the complex branch of a switch statement. In terms of cyclomatic complexity, both of these options increase it by k?1 if given k cases.

Case and Switch expressions

[edit]

Case expressions are supported by languages dating at least as far back as ALGOL-W.[8] In ALGOL-W, an integer expression was evaluated, which then evaluated the desired expression from a list of expressions:

  J := case I of (3.14, 2.78, 448.9);
  A := case DECODE(C)-128 of ("A", "B", "C", "D", "E", "F");

Other languages supporting case expressions include SQL, Standard ML, Haskell, and Common LISP.

Switch expressions are introduced in Java SE 12, 19 March 2019, as a preview feature. Here a whole switch expression can be used to return a value. There is also a new form of case label, case L-> where the right-hand-side is a single expression. This also prevents fall through and requires that cases are exhaustive. In Java SE 13 the yield statement is introduced, and in Java SE 14 switch expressions become a standard language feature.[9][10][11] For example:

int ndays = switch (month) {
    case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> 31;
    case APR, JUN, SEP, NOV -> 30;
    case FEB -> {
        if (year % 400 == 0) yield 29;
        else if (year % 100 == 0) yield 28;
        else if (year % 4 == 0) yield 29;
        else yield 28; }
};

Alternative uses

[edit]

Many languages evaluate expressions inside switch blocks at runtime, allowing a number of less obvious uses for the construction. This prohibits certain compiler optimizations, so is more common in dynamic and scripting languages where the enhanced flexibility is more important than the performance overhead.

PHP

[edit]

For example, in PHP, a constant can be used as the "variable" to check against, and the first case statement which evaluates to that constant will be executed:

switch (true) {
    case ($x == 'hello'):
        foo();
        break;
    case ($z == 'howdy'): break;
}
switch (5) {
    case $x: break;
    case $y: break;
}

This feature is also useful for checking multiple variables against one value rather than one variable against many values. COBOL also supports this form (and other forms) in the EVALUATE statement. PL/I has an alternative form of the SELECT statement where the control expression is omitted altogether and the first WHEN that evaluates to true is executed.

Ruby

[edit]

In Ruby, due to its handling of === equality, the statement can be used to test for variable’s class:

case input
when Array then puts 'input is an Array!'
when Hash then puts 'input is a Hash!'
end

Ruby also returns a value that can be assigned to a variable, and doesn’t actually require the case to have any parameters (acting a bit like an else if statement):

catfood =
  case
  when cat.age <= 1
    junior
  when cat.age > 10
    senior
  else
    normal
  end

Assembler

[edit]

A switch statement in assembly language:

switch:
  cmp ah, 00h
  je a
  cmp ah, 01h
  je b
  jmp swtend   ; No cases match or "default" code here
a:
  push ah
  mov al, 'a'
  mov ah, 0Eh
  mov bh, 00h
  int 10h
  pop ah
  jmp swtend   ; Equivalent to "break"
b:
  push ah
  mov al, 'b'
  mov ah, 0Eh
  mov bh, 00h
  int 10h
  pop ah
  jmp swtend   ; Equivalent to "break"
  ...
swtend:

Python

[edit]

For Python 3.10.6, PEPs 634-636 were accepted, which added match and case keywords.[12][13][14][15] Unlike other languages, Python notably doesn't exhibit fallthrough behavior.

letter = input("Put in a single letter: ").strip()[0].casefold()  # First non-whitespace character of the input, lowercase
match letter:
    case "a" | "e" | "i" | "o" | "u":  # Unlike conditions in if statements, the `or` keyword cannot be used here to differentiate between cases
        print(f"Letter {letter} is a vowel!")
    case "y":
        print(f"Letter {letter} may be a vowel.")
    case _: # `case _` is equivalent to `default` from C and others
        print(f"Letter {letter} is not a vowel!")

Exception handling

[edit]

A number of languages implement a form of switch statement in exception handling, where if an exception is raised in a block, a separate branch is chosen, depending on the exception. In some cases a default branch, if no exception is raised, is also present. An early example is Modula-3, which use the TRY...EXCEPT syntax, where each EXCEPT defines a case. This is also found in Delphi, Scala, and Visual Basic .NET.

Alternatives

[edit]

Some alternatives to switch statements can be:

  • A series of if-else conditionals that examine the target one value at a time. Fallthrough behavior can be achieved with a sequence of if conditionals each without the else clause.
  • A lookup table, which contains, as keys, the case values and, as values, the part under the case statement.
(In some languages, only actual data types are allowed as values in the lookup table. In other languages, it is also possible to assign functions as lookup table values, gaining the same flexibility as a real switch statement. See Control table article for more detail on this).
Lua does not support case/switch statements.[16] This lookup technique is one way to implement switch statements in the Lua language, which has no built-in switch.[16]
In some cases, lookup tables are more efficient than non-optimized switch statements since many languages can optimize table lookups, whereas switch statements are not optimized unless the range of values is small with few gaps. A non-optimized, non-binary search lookup, however, will almost certainly be slower than either a non-optimized switch or the equivalent multiple if-else statements.[citation needed]
  • A control table (that may be implemented as a simple lookup table) can also be customized to accommodate multiple conditions on multiple inputs if required and usually exhibits greater 'visual compactness' than an equivalent switch (that can occupy many statements).
  • Pattern matching, which is used to implement switch-like functionality in many functional languages.

See also

[edit]

References

[edit]
  1. ^ Skeet, Jon (23 March 2019). C# in Depth. Manning. ISBN 978-1617294532.
  2. ^ Bloch, Joshua (2018). "Effective Java: Programming Language Guide" (third ed.). Addison-Wesley. ISBN 978-0134685991.
  3. ^ "Definition by cases", Kleene 1952:229
  4. ^ van der Linden, Peter (1994). Expert C Programming: Deep C Secrets, p. 38. Prentice Hall, Eaglewood Cliffs. ISBN 0131774298.
  5. ^ since version 4.0, released in 2009.
  6. ^ Vlad Lazarenko. From Switch Statement Down to Machine Code
  7. ^ Guntheroth, Kurt (April 27, 2016). Optimized C++. O'Reilly Media. p. 182. ISBN 9781491922033.
  8. ^ Wirth, Niklaus; Hoare, C. A. R. (June 1966). "A contribution to the development of ALGOL". Communications of the ACM. 9 (6): 413–432. doi:10.1145/365696.365702. S2CID 11901135. Retrieved 2025-08-05 – via Association for Computing Machinery.
  9. ^ "JEP 325: Switch Expressions (Preview)". openjdk.java.net. Retrieved 2025-08-05.
  10. ^ "JEP 354: Switch Expressions (Second Preview)". openjdk.java.net. Retrieved 2025-08-05.
  11. ^ "JEP 361: Switch Expressions". openjdk.java.net. Retrieved 2025-08-05.
  12. ^ Galindo Salgado, Pablo. "What's New In Python 3.10". Python 3.10.6 documentation. Retrieved 2025-08-05.
  13. ^ Bucher, Brandt; van Rossum, Guido (2025-08-05). "PEP 634 – Structural Pattern Matching: Specification". Python Enhancement Proposals. Retrieved 2025-08-05.
  14. ^ Kohn, Tobias; van Rossum, Guido (2025-08-05). "PEP 635 – Structural Pattern Matching: Motivation and Rationale". Python Enhancement Proposals. Retrieved 2025-08-05.
  15. ^ Moisset, Daniel F. "PEP 636 – Structural Pattern Matching: Tutorial". Python Enhancement Proposals. Retrieved 2025-08-05.
  16. ^ a b Switch statement in Lua

Further reading

[edit]
暗卫是什么意思 什么是造影 口水歌是什么意思 拔罐对身体有什么好处 早年晚岁总无长是什么意思
为什么会宫寒 心衰吃什么药最好 梦见自己尿裤子了是什么意思 cdg是什么牌子 阳历6月28日是什么星座
井是什么生肖 口舌是什么意思 什么是脉冲 炙子是什么意思 痔疮吃什么药好
什么血型可以生出o型血 大力出奇迹什么意思 心脏属于什么组织 红枣和枸杞一起泡水喝有什么作用 upup是什么意思
便潜血阳性什么意思sanhestory.com 四十年婚姻是什么婚hcv9jop5ns4r.cn 潘粤明老婆现任叫什么xianpinbao.com 大同有什么好吃的hcv7jop6ns5r.cn 皇汉是什么意思hcv9jop6ns7r.cn
张起灵和吴邪什么关系hcv9jop1ns4r.cn 做梦梦到狮子是什么意思hcv8jop7ns8r.cn 什么满天下hcv9jop0ns0r.cn 胃经当令是什么时辰hcv9jop6ns6r.cn 家是什么hcv8jop8ns2r.cn
柴鸡是什么鸡hcv7jop9ns6r.cn 常吃黑芝麻有什么好处和坏处hcv9jop1ns6r.cn 机滤是什么beikeqingting.com 鼻窦炎是什么病hcv9jop6ns5r.cn s.m什么意思hcv8jop2ns3r.cn
肺活量5000什么水平hcv9jop5ns5r.cn 有氧运动是什么意思hcv8jop9ns7r.cn 1989年出生是什么命hcv9jop3ns5r.cn 什么的迎春花dayuxmw.com 属兔与什么属相相克hcv9jop4ns6r.cn
百度