我知道这在所有语言中都是不一样的,但这是我想知道一段时间的事情
既然标题不是很清楚,那么两者之间有技术上的区别吗
if (...) {
// ...
} else if (...) {
// ...
}
及
我知道从实际的角度来看,他们也会做同样的事情,选择其中一个的可读性是有原因的,比如如果第二个如果与第一个没有直接关系
但从技术角度来看,我不确定。编译器是否倾向于使用else if执行一些特殊的操作,或者是否将其当作单行处理,例如:
if (...)
singleLine
,因为这样可以更好地向后兼容某些浏览器,例如编写而不是。但是仍然有浏览器在那里,不能容忍你忽略了空间吗?(W3C没有提到哪些浏览器会导致问题。)
我知道这没什么区别。我只是喜欢短一点的版本。因此,除非有充分的理由,否则我现在将在关闭空标记之前开始编写不带空格的XHTML。如果仍有依赖空格的浏览器使用它
保存的字节数不能证明可能存在的问题。向后兼容的要点是仍然支持不支持短符号的浏览器。可能还有很多
我猜您的选择可能取决于网站的目标受众(例如,与seniors.net相比,使用Win 95和IE 4
快速提问:我已经开始在代码注释中放置StackOverflow Q&A和菜谱链接,以提醒我在哪里发现了某些技巧
我应该这样做,还是应该努力将问答/食谱翻译成更永久(但多余)的评论
谢谢
Mike我认为在代码注释中放置Q&A和菜谱链接根本不是一个好主意。主要原因是您现在正在代码内部的注释中维护一个知识库。没有一个简单的方法来参考这种材料。我建议保留一个单独的文档或带有链接和问答的wiki,如果需要上下文,请将代码示例复制到文档/wiki中。如果您能够设置,我建议您使用wiki,因为您可以在wiki
在创建私有或受保护的变量、方法、类等时,是否应使用文档注释对其进行注释?一些人无疑会告诉您,没有任何需要注释(从技术上讲,他们是正确的,注释对输出没有影响)。不过,这取决于您标记为的“编码样式”。我个人总是注释所有变量,并给它们一个描述性的名称。请记住,其他人可能想使用您的源代码,或者您可能想在几年后使用,在这种情况下,在您仍然知道它的功能时,花几秒钟来记录它是值得的。一些人无疑会告诉您,没有任何需要注释(从技术上讲,他们是正确的,评论对产出没有影响)。但是,这取决于您将其标记为的“编码样式”。
我正在编写一个应用程序,它需要跨引擎找出数据库的模式。为此,我正在使用Python编写一个小型数据库适配器。我决定首先编写一个基类,概述我需要的功能,然后使用从该基类继承的类实现它。在此过程中,我需要实现一些常量,这些常量需要在所有这些类中都可以访问。其中一些常量需要使用C样式的按位OR组合
我的问题是,
共享这些常量的标准方式是什么
创建可以组合的常量的正确方法是什么?我指的是C允许的MAP|u FIXED | MAP|u FILE | MAP|u SHAREDstyle代码
对于前者,我遇到
由于函数分支越多,执行速度就越慢,使用下面这样的注释块执行一次代码(例如变量初始化)是更好,还是使用函数更好哪一种做法更好?一种选择与另一种选择真的不同吗?若否,原因为何
注释块:
/*************************************************************************************************/
/*********************************** VARIABLE INITIATIONS
为什么人们依赖评论作为业务逻辑?(例如CakePHP,条令)
条令示例(从他们的文档中,条令与代码本身一样依赖于注释):
几周前,我不得不在一个CakePHP应用程序中做一个更改,我遇到了一个问题,没有调用回调,只是深入挖掘他们的内心,我发现我需要在函数定义之前添加一个docblock注释,以便识别调用,我在sock中。不幸的是,我现在没有代码给你一个例子
我使用了许多编程语言,但我发现这种趋势非常令人讨厌,我认为这打破了编程规则
也许有人可以解释一下,在我看来这是一个非常糟糕的做法,但我期待着
到目前为止,我还没有找到任何方法使GtkProgressBar的背景透明。我尝试将透明图像设置为背景,但忽略了alpha通道。这可以做到吗?Gtk没有处理透明度的机制
这将造成严重的性能损失。即使小部件的覆盖部分发生更改,也必须生成公开事件。
我想应该有一种方法以您自己的方式组合小部件。但是我认为在C/Gtk中实现它需要做很多工作。在C++/gtkmm中,实现自定义小部件并不难,它自己完成所有渲染。您可以使用gtkrc文件进行尝试。
试着做这样的事情
`样式tc主题进度条
{
xthicknes
我刚接到一个新任务,看起来这将是一个有趣的挑战
客户希望为其在JVM上运行的内部(即将开源)编程语言开发一个代码样式检查工具。语言语法非常类似Java
客户基本上希望我生产类似的产品
所以我的问题是,你会如何处理这个问题?如果没有问题,您会向客户提出什么建议
我想我有三个选择
从头开始写东西。我不喜欢这样做,因为这类代码分析工具问题似乎已经解决了很多次,因此必须有一种更“框架”或“平台”导向的方法
Fork现有的代码样式检查工具,并修改解析以适应这种新语言等
扩展或插入现有的静态代码分析工具。(
您喜欢哪种编码风格,为什么
if case1:
return res1
if case2:
return res2
return res3
或:
或:
原因:我有这样的代码,我想知道最清晰的表达方式是什么。就我个人而言,我不能在第一和第二之间做出决定,我不会考虑第三。
我正要给这种语言贴上不可知标签,但我意识到函数式语言没有这个问题,因为它默认为case2=p。第一种语言和第二种语言并不完全相同
第一个并不意味着条件是相互排斥的
如果是,则使用2或3
我更喜欢选项3,因为对于其
我想知道,在这种一般性陈述类型中,对于什么是更好的实践,是否有任何共识
if(CouldDoSomething())
DoThatThing();
else
WriteErrors(GetTheErrorsThatWouldHaveResulted());
这可能需要两倍的工作量。因为您必须检查潜在的问题,所以您可以做您想做的事情,或者返回并获取错误消息。
它还需要3个单独的功能:
可以做某事做某事并得到平均结果的错误
鉴于
string errorString=TryTo
我开始在GTK+上做一些小项目
GLib定义了一系列数据类型,如gintgpointer等等,它们只是基本数据类型的typedef(gint是int的typedef,gpointer是void*的typedef,等等)
现在,假设我有一个函数或一个类,它根本没有使用GTK。我真的很想使用基本数据类型,这样我就可以在其他地方重用类/函数,即使我不包括GTK头
另一方面,我发现在代码中混合使用gint和int是非常难看的,而实际上它们是同一个东西
总之,我想知道是否有一个标准的实践,何时使用一个或另
许多编码标准建议对变量和函数名使用带小写首字母的camelCase。如果由于“语法原因”(例如,因为它是一个名称),首字母应为大写,那么标准做法是什么?例如,我应该写KnuthPlassAlgorithm还是KnuthPlassAlgorithm?这取决于你的语言和你问谁。通常,您可以使用“camelCase”局部变量和“ProperCase”函数名或ProtectedMemberVariables。通常,人们对_private变量使用下划线和驼峰大小写。如果你不想去想它,而你使用的是VS和C,
是否存在不在数据对象上使用接口约定的最佳实践
我的应用程序中有两个自定义控件,我希望每个人都能维护创建控件的标准。为此,我创建了一个接口,其中公开了一些标准属性,我的所有控件都应该实现该接口。我检查了自定义控件是否实现了接口else抛出异常
这是一种正确的方法来实现最佳实践,还是有更好的方法来实现同样的结果
下面这些条件表达式之间的区别让我有点困惑:
if( 1 == a) {
//something
}
及
我在我下载的一些脚本中看到了上面的一个,我想知道它们之间的区别是什么。经常使用常量==变量语法来避免将=误键入=。当然,当您有常量==函数\u调用\u重新调整\u无任何内容\u可修改时,它也经常在不理解的情况下使用
除此之外,没有区别,除非您有一些奇怪的运算符重写。通常使用常量==变量语法来避免将=误输入为=。当然,当您有常量==函数\u调用\u重新调整\u无任何内容\u可修改时,它
我正在学习MVP模式。在一些例子中,我看到了这一点!任何人都可以证明程序员为什么使用这个名称约定?'I'代表接口。区分接口和类/结构是一种常见的命名约定
接口不是类——它们定义行为,类提供实现
有关更多信息,请阅读MSDN上的这篇文章:
接口定义一组成员的签名,这些成员
实现者必须提供。接口不能提供实现
成员的详细信息。例如,ICollection接口
定义与使用集合相关的成员。每个班级
实现接口必须提供的实现详细信息
这些成员。类可以实现多个接口
“I”代表接口。区分接口和类/结构是一种常见的
我的朋友和我正在创业(我们没有太多经验,这是我们有史以来的第一个大项目)。因为我们想让我们的产品尽快上市,所以一开始我们并不关心编码惯例。现在,当编码完成时,我们开始担心代码的可维护性。然而,由于代码已经在工作,重新格式化它将需要大量的工作,我们担心它可能会引入新的bug
我想知道你对这个话题的看法。重新格式化代码值得吗?格式、对齐和缩进方面的更改不应影响代码的正常运行但是,注意不要在标准化命名约定方面更改功能(例如:集合使用单数而不是复数,反之亦然)
如果可以,将其视为单个系统范围的更改,并且
如果我有一个包含大量条件的函数,那么组织它的最佳方法是什么
我担心的是其他人进入代码并理解正在发生的事情。尽管示例很简单,但请想象条件是非常复杂的
例如:
public void function(string value, string value2)
{
if (value == null)
return;
if (value2 == value)
DoSomething();
}
或
或
我更喜欢第一种选择——更清晰,更容易阅读和理解
我
可以使用以下方法获取所有wxPython事件的列表:
import wx
for x in dir(wx):
if x.startswith('EVT_'):
print x
如何获取定义wx.Frame样式位掩码时使用的所有样式参数的列表
在源代码文件中,应该严格遵守固定的文本宽度吗?更具体地说,您是否始终遵守80个字符的代码限制和100或120个字符的注释限制?有时,在我的代码中有一些行,我不太愿意引入换行符,因为它会破坏统一性或降低周围代码的易读性。在这些情况下,您是自行决定,还是始终选择遵守文本宽度?这取决于您为什么寻求强制执行限制
代码是您自己的,还是与许多其他人共享?您是否正在创建一个源代码,该源代码将被另一个人、十几个人或数百个人查看和扩充?使用/查看的人越多,一致性越好
当然,你也为不限制
有时我的代码中有行
在这篇
我发现的大多数代码格式化程序都有句柄缩进和一些额外的间距,但很少
修复位于新行上的花括号。有人知道这些不同风格的花括号是如何命名的吗
另外,是否有一个在线代码格式化程序
目前,我正在使用自己的快速脏Python脚本。一个不错的脚本。它可以通过C、C++、C、java来实现,也可以通过命令行来格式化代码,或者可以在格式化程序中使用(如果你想创建一个)。它看起来像ObjuleC,除了C、C++、C、D、java和PaW.
至于具体的花括号样式,有一个很好的总结,其中大部分。例如,有K&R、BSD/A
当我使用命令式语言时,我经常编写如下代码
foo (x) {
if (x < 0) return True;
y = getForX(x);
if (y < 0) return True;
return x < y;
}
foo(x){
如果(x
我曾在几个项目上与OpenCL合作,但总是将内核作为一个函数(有时相当大)编写。现在我正在做一个更复杂的项目,我想在几个内核之间共享函数
但我能找到的示例都将内核显示为单个文件(很少有人甚至调用辅助函数)。似乎应该可以使用多个文件-clCreateProgramWithSource()接受多个字符串(我假设它们是组合的)-尽管pyopencl的Program()只接受一个源
因此,我希望听到任何有这方面经验的人:
是否存在与多个源文件相关的任何问题
对于pyopencl来说,简单地连接文件是最
我发现自己一直在写很长的一行代码(受shell管道的影响),如下所示:
def parseranges(ranges, n):
"""
Translate ":2,4:6,9:" to "0 1 3 4 5 8 9...n-1"
== === == === ===== =========
"""
def torange(x, n):
if len(x)==1:
(x0, ) = x
在过去的几天里,我有一个疑问,在用ruby编写代码时,线性代码是否比迭代更快更可取
让我举个例子。相同功能的代码块以两种不同的方式编写:
方式1:
['dog', 'cat', 'tiger'].each do |pet_name|
puts "I have many pets, one of them is #{pet_name}."
end
方式2:
puts "I have many pets, one of them is dog."
puts "I have many pets,
我有个问题
我需要修改java“if/else/for/while/do语句应始终使用大括号”“将规则编码到声纳质量配置文件中
if/else/for/while/do语句应始终使用大括号
在某些情况下,使用大括号可能容易出错。例如在
下面的示例中,这两个语句似乎附加到
if语句,而这仅适用于第一个语句:
if (condition) // Non-Compliant
executeSomething();
checkSomething();
if (condition) { //
任何人在开发涉及控制可能伤害使用它的个人的设备/系统的软件时,都必须遵守哪些行业已知的软件安全标准?软件应绝不运行可能伤害他人的系统。唯一可能(但仍有疑问)出现这种情况的时间可能是错误的,是使用专门为安全设计的
你应该研究:
MISRA是汽车行业遵循的标准,但它是确保操作正确性和可移植性的编码标准
你需要仔细阅读,才能理解这个问题的复杂性
此外,美国宇航局和军事文件广泛可用,并讨论了允许确定系统安全性的编码标准
-Adam不是一个安全标准,但是阅读一段时间的公司风险会显示出你需要努力预防的
对于如何在TextMate中折叠和组织代码,我有点不太清楚,TextMate的代码折叠行为一直困扰着我的一个问题是,在PHP中,如果我有一个包含大量函数的文件,我只想折叠所有函数,但不想折叠它们的内容,我必须点击每个功能并点击F1或点击行指示器中的小折叠按钮
我发现,这是可以的,但不太理想,因为折叠所有级别的代码意味着每个函数中的每个if、else、while等语句也将被折叠,这意味着我在处理函数时必须不断地点击F1
有没有办法让TextMate将PHP文件中的所有函数都识别为“级别1”,所以当
就编码风格而言,我遇到了两个问题,我只是想知道解决它们的最佳方法是什么
第一个是有很多参数的方法,我做了两件事中的一件(为了演示而使用Java)
及
有时还打算一路回来
至于方法的声明,我赞成#1
对于我喜欢的电话#2,因为写出来(是的,我很懒)和完成工作更快。但很明显,这可能会让人困惑,因为它使用了与我格式化花括号类似的样式,乍一看,人们可能会认为这是某种声明,也许,我不知道,很难说我是谁在写它
我遇到的另一个问题,虽然不是经常遇到,是当一个方法在一个类中的一个类中,在一个类中的一个类中,等等
很久以前,我快速浏览了我的一位经理正在编写的一些代码(PERL…urp),他在代码中使用的横幅/标题系统让我大吃一惊。我没有机会深入研究他的代码的细节,但仅仅从屏幕上的横幅评论,我就可以很容易地知道代码要做什么,即使是从很远的地方
不幸的是,那是很久以前的事了,我们当时的谈话并不适合我说,“是的,我们忘了我们的网络公司刚开始破产,我能记下你的编码风格吗?”
几年后,我还没有实现像我那天看到的(可能现在是虚构的)代码那样清晰的高级注释风格
当我说“横幅”时,我指的是许多编码人员用来在他们的代码中创
我有很多变量需要声明,原始代码如下:
DIMENSION energy_t(20000),nrt(20000),npsh(1000),xx(1000),yy(1000),
:step(1000),stepz(1000),r1(1000),rr(1000),ic(1000),diffrr(1000)
我把它改写成这样:
DIMENSION
:energy_t(20000),
:nrt(20000),
:npsh(1000),
:step(1
你写的最难看的代码是什么?不是因为你不懂,而是因为软件、硬件或公司政策的限制
由于在数据库布局和编程语言方面的不寻常选择,我曾经构建了一个C程序,该程序读取SQL数据库结构,并生成另一个C程序,该程序读取该数据库并将其备份到一个文件中,或者将其复制到共享或多或少相同列的第二个数据库中。这是一个巨大而笨重的代码生成器。任何正则表达式。:) 我很自豪,也不写极端丑陋的代码(尽管丑陋的定义随着经验的变化而变化)。我的老板付钱让我写代码,他希望它是好的
有时候你得写些黑客作品。但是您必须始终声明以后有权
我的是:
硬编码是一种方式!我所有的问题都解决了。一个接一个地编码就行了。而问题又回来了,这会毁了你的一天
我绝对讨厌它,但事实是“商人”倾向于喜欢它,因为它花更少的时间来得到他们想要的东西。作为一名软件开发人员,尤其是在公司环境中工作的软件开发人员,大多数人会说:“是啊,何必麻烦呢,只是硬编码而已。”。您对硬编码的态度如何?我通常会尝试将值放入配置文件,而不是硬编码。如果一个值必须硬编码,我用硬编码的值创建一个常量,代码中的任何地方都引用相同的常量。如果值需要更改,可以在一个位置进行
对于应用
我是PHPBB论坛的新手,我正在努力改变页眉和页脚的样式。有人能帮我吗?在不知道具体要做什么的情况下,您只需在/styles/themename/template/中编辑totall_header.html和totall_footer.html,就可以完成您想做的任何事情
如果要将变量传递给模板,可以在page_header和page_footer函数的functions.php中执行
从我的一门编程课程的教学大纲中可以看出:“如果您可以只阅读注释,而不看代码,并解释代码的作用,那么您的文档就足够了。”
你们听说过这样的文档风格吗?这是一种好的做法吗?对我来说似乎过于热情了。我有,我自己的研究生工作最初有这样的要求。这可能有点过分热情,但如果它能让人们评论他们的代码,那么我完全支持它。我有,我自己的研究生工作最初有这样的要求。这可能有点过分热情,但如果它能让人们评论他们的代码,那么我完全支持它。我会说相反的话。一个好的文档是一个能说明问题的代码!有些注释倾向于降低代码的可读性和
我是异步编程新手,所以请耐心听我说。我有一个对web服务API的调用,它的速度可能非常慢。在前端,我可以用一个“装载”灯箱或其他东西来处理它。但是,在后端,我有我的请求:
var req = http.request( options, function(res) {
res.on('data', function(chunk) {
doStuff();
} );
res.on('end', function() {
doMoreStuff(); // This c
这是一个关于编码风格的问题。当您定义一个用于存储线程数(或任何线程数)信息的变量时,是否将其命名为“num_threads”或“nr_threads”?还是有更好的名字
谢谢大家!!
Cui我更愿意将该变量命名为“numberOfThreads”
这个问题扩大了。问题是,clang格式的默认行为因版本而异,即使是内置样式也是如此。坦率地说,我想问一下,为什么开发人员不关心这里的兼容性,但这与问题无关。情况是这样的,我必须处理它。我不允许要求某个版本的clang格式(如一个用户在相关回答中建议的),并且需要配置clang格式,以便它为不同版本提供相同的结果。如果可能,应涵盖>=4.0的版本。如果这不可行,则可接受适用于版本>=最低版本的解决方案
我想人们可以为每个铿锵格式的版本找到一个配置,以提供所需的输出——这是一项繁琐的工作,但至少是一
什么时候是正确的时间,什么时候是错误的时间采取快速和肮脏的方法与适当的优雅的解决方案
这是从对我的问题的评论开始的:
我想要一种只使用内部Java或我编写的东西的方法。唯一的内置方式是使用不受支持的sun.*包。那么,什么时候采取这种方法是正确的,什么时候是错误的?在任何情况下,你都必须平衡用于解决问题的时间,然后平衡用于维护解决方案的时间。如果你所做的任何事情的生命周期都是漫长的,那么预先花在以正确的方式做事情上的额外时间大概会更容易维持,并且从长远来看会拯救你
但是,如果存在时间限制,则翻修
在提问之前,让我先介绍一下背景信息:
我最近加入了一个新的软件开发小组,该小组使用Rational工具进行配置管理,包括源代码控制和变更管理系统。
除了这些工具之外,团队还有一个标准做法,即将任何代码更改作为注释记录在代码中,例如:
///<history>
[mt] 3/15/2009 Made abc changes to fix xyz
///</history>
///
[mt]3/15/2009对修复xyz进行了abc更改
///
注释标准的官方目的
假设您参与了一个大型项目的开发,该项目已经开发了很长一段时间(超过一年)。这些项目遵循一些当前的设计准则,但也有一些不同的,目前不鼓励的(主要是命名准则)
假设您不能/不允许更改整个项目:
更重要的是,一致性,遵循现有的指导方针,无视当前的指导方针或指导方针的使用,在同一项目的模块之间产生差异
谢谢。一如既往,视情况而定
如果这是一个你将长期从事的项目,那么进行更改或引入改进以实现一致性是值得的。对于寿命较短的项目,我不会费心
通常,这个问题最好问那些发明指南的人——在指南中可以注意到“现有的应
我经常需要创建一个或两个不同于另一个的dict。以下是我通常做的:
setup1 = {'param1': val1,
'param2': val2,
'param3': val3,
'param4': val4,
'paramN': valN}
setup2 = copy.deepcopy(dict(setup1))
setup2.update({'param1': val10,
有时,第三方库在更改接口时会造成严重破坏。在某些语言中,它甚至发生在语言层面
有没有可能以一种可以阻止它的方式来编写我们的代码
例如,我可以想到一种方法——编写自己的包装函数。
这样,更改将局限于一个函数。但是,这又会产生很大的开销
你有什么想法吗?苹果向其开发者建议,你的代码可以检查版本;然后,当版本更改时,您可以根据需要更新代码。以下是他们更深入讨论的链接:
基本上,它们提供了可以在头文件中使用的标记,以指示组件将要使用或已知工作的最大版本。基本上,您包括某种版本机制(通常比低/高版本限制
CoffeeScript方法/函数调用中括号的首选、公认、最佳做法等是什么
foo(bar,baz).zap
(食物吧,巴兹).zap
总是1还是总是2?或者其他什么/这取决于(请详细说明)第一种样式更常见。一个原因是,在链中,链的每一步都只能使用第一种样式:
foo(bar, baz).zap(yota).penumbra
但请考虑
new Foo.bar()
表示“创建Foo.bar的新实例,而
(new Foo).bar()
表示“创建Foo的新实例,并在该实例上调用bar方法”。类
在Lisp(任何Lisp方言都可以)中,用多个参数调用函数的惯用方法是什么
我指的是超过80个字符的限制
假设我们有一个名为foo func的示例函数,该函数接受可变数量的参数
(foo-func 'foo 'bar 'baz 'qux 'foo-bar 'foo-baz 'foo-qux 'bar-foo 'bar-baz 'you-get-the-idea)
如果不是在一条不可理解的长线上,人们通常会如何安排ARG
注意这不是关于个人偏好的问题,而是关于建议如何做的问题通常情况下,会这样排
我读到命名返回bool(如IsChecksumCorrectPacket)的函数是一个很好的约定,但我也读到命名布尔变量(如IsAvailable=True)是一个很好的约定
但这两条规则是不相容的:我不会写:
IsChecksumCorrect = IsChecksumCorrect(Packet)
那么,命名存储这些函数返回的布尔值的变量的最佳方法是什么呢
PS:如果你能想出一种不依赖于改变大小写的方法,那就有额外的要点。有些语言,如Delphi,是不区分大小写的。首先,只有不需要参数的函
其中,德米特定律规定C类的方法f只能调用以下方法:
C
由f创建的对象
作为参数传递给f的对象
保存在C的实例变量中的对象
在Options类的实例上调用getScratchDir()在这里是违反规则的
现在,为了改进体系结构,我们需要更多地了解代码试图做什么。是否可以将该方法移到CTxt类中?在Options类的实例上调用getScratchDir()在这里是违反规则的
现在,为了改进体系结构,我们需要更多地了解代码试图做什么。是否可以将该方法移到CTxt类中?这一定是我见过的最糟糕的“定律
我与InterSystems Cache合作,寻找Caché对象脚本编码准则。
有人举过什么例子吗?有这样一个例子。它提供了Caché对象脚本代码指南
我曾尝试在Common Lisp中实现快速排序,到目前为止,我得到的是:
(defun quick-sort (list)
(if (cdr list)
(let ((pivot (car list)))
(append (quick-sort (remove-if-not (lambda (n) (< n pivot)) list))
(remove-if-not (lambda (n) (= n pivot)) list)
我正在构建一个分析C#代码片段并提供一些反馈的工具。我用
tree=CSharpSyntaxTree.ParseText(codeSample)
获取一个SyntaxTree,然后
semanticModel=compilation.GetSemanticModel(树)
获取语义模型
我可以通过semanticModel.Compilation.GetDiagnostics()在代码中找到语法错误但我知道Roslyn也可以使用
我的问题是:如何以编程方式在代码中获得这些代码样式问题,就像我可以
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 18 页