在显示之前,请参阅xslt以操作元素值?对于原始的XML和XSL.我在那里得到了一个问题的答案.
关于这个XML/XSL的另一个问题是:如果我想在XSL局部变量中捕获元素的值(例如"title"元素),然后对其进行操作,我该如何捕获该值和将它分配给变量?我觉得它与XSL"param"有关,但我不确定.
那么,在相同的代码中,XSL 的最小变化是什么,以便我在变量中拥有title的值?
在如何停止Pylint消息C0103的答案中,@ ChristopheD准确地提到"pylint将所有模块级变量解释为'常量'."
我喜欢Pylint,并且假设作者的默认行为具有代码质量令人鼓舞的原因.那么,任何人都可以告诉我:为什么 pylint将所有模块级变量解释为'常量'?
这可能是pylint强调隐式全局变量的方式,这些变量被认为是坏的吗?
背景
我最后一次询问括号是否导致隐式转换(这里)时,@ pmg足以指出"C中的任何内容都不在int下面"但是那里,讨论是关于按位运算符,括号结果是只是一个分心.
介绍
下面,括号是主要的吸引力.或者,为了更无聊但更精确,我看到的唯一操作符是括号和赋值运算符.
在这个关于C括号运算符的引用中,我没有看到关于改变类型的括号的任何内容(在类型转换语法之外,这不是这种情况).
同时,这里的提醒,有一个基准是上分配自动类型转换,但我不认为这会解释静态分析工具的行为,我将在这里描述.
正如我刚才的问题,"OK"指的是静态分析工具,并没有警告的隐式类型转换,而"不OK"的意思,它没有.
int main(void)
{
unsigned int ui;
int i;
ui = (256U); // NOT OK (*) (1)
i = (256U); // NOT OK (*) (2)
i = 256; // OK
i = 256U; // NOT OK
ui = 256U; // OK (3)
ui = 256; // NOT OK
return(0);
}
Run Code Online (Sandbox Code Playgroud)
除了前两个,我能理解它们 - 括号有什么作用?如果他们没有采取隐式类型转换的方式,那么我希望(1)没问题,(2)不行.如果他们对int小于int的类型进行自动类型提升,那么我希望(1)不正常,(2)没问题.但是这个工具说两者都不行.
这是一个静态分析工具错误,还是工具正确,我还需要了解C中隐式类型转换的其他内容?
(顺便说一句,我希望值256足够小,不会导致我的机器溢出......)
(有关更新问题的摘要,请参见结尾.)
我想向一群人(孩子或成人)传达一个用高级语言编写的计算机程序是如何工作的,以及该程序与计算机之间的关系是什么,就像他们所知的消费者设备一样(像电视一样) "做"打字和"互联网"的框.
我想在没有电脑的情况下这样做.不是因为我没有它们,而是因为我想要一种有趣的体育活动,涉及到人们的表演,舞蹈,音乐,运动和捕获旗帜的方式很有趣.
我已经阅读了教学初学者编程,没有计算机在stackoverflow; 它对计算机科学Unplugged的引用最为接近,但大多数活动要么太复杂,需要太多道具,要么专注于特定的计算机科学概念.
我还阅读了教授编程基础知识的游戏,但几乎与我上面第一段中的描述不相符.
为了更好的衡量,我已经阅读了在命令式编程之前是否应该教授函数式编程?所以我愿意接受任何一种教学活动.
请记住这些要求,其中一些是主观的:
在我看来,一个材料来源可能是公司发送给你的那些团队建设游戏.但这些是为团队建设而设计的,而不是教授编写和运行计算机程序的内容.但也许你明白了.另一种看待这个问题的方法是建议我应该使用哪些搜索词来找到更多的答案 - 虽然我通常可以选择好的搜索词,但是隐含的"或""计算机"和"游戏"找不到我想要的东西因为这种组合是为完全不同的东西而保留的.
更新:
这是一个警告我,网上有很多人,看看在C++代码上运行gcc时:
cc1plus: warning: command line option "-Wstrict-prototypes" is valid for Ada/C/ObjC but not for C++
Run Code Online (Sandbox Code Playgroud)
警告文字非常清楚:'C++'不在集合[Ada/C/ObjC]中,所以我完全不清楚为什么gcc在编译C++代码时会发出这个警告.(仅供我们使用C++代码打开此标志的原因是因为它主要是C代码,我们选择了严格(高级别)警告选项列表,但我们添加了一些C++代码.
我的问题是:为什么这个警告对C++不起作用?
警告选项的gcc文档来自http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Warning-Options.html,它是:
-Wstrict-prototypes(仅限C和Objective-C)如果声明或定义函数而不指定参数类型,则发出警告.(如果前面有一个指定参数类型的声明,则允许使用旧式函数定义而不发出警告.)
现在我只知道我忘了关于C++的一些明显的东西,但C++是否也需要为原型中的函数指定参数类型?确实,那些函数原型通常在类声明中,因为函数通常是成员函数,但不是原型而是必需的吗?或者即使他们只是好习惯,那么为什么gcc不会通过这个选项提供支持呢?或者如果没有,通过C++的并行选项?
注意:这个问题是关于位移运算符<<和>> 的第二个操作数的符号.完全没有第一个操作数.
CERT INT34-C,部分:不要移位负数位...
并不是说它需要理由,但他们证明这是不确定的行为.
我本以为这条规则很有意义,因为如果你想换另一条路,那么使用适当的移位算子移动另一个方向的正位数.
因此,如果在C中,移位负位数是不必要的和未定义的,为什么<<或>>的第二个操作数甚至允许被签名?
MISRA-C:2004,例如(无论你怎么想MISRA喜欢或不喜欢)在6.10.2节中,作为解释结果的类型仅取决于第一个操作数的副作用,说"第二个操作数可以是任何有符号或无符号整数类型".[强调我的]
为什么邀请人们在位移中使用带符号的第二个操作数?为什么允许呢?有没有编译器警告过它?
我通过静态分析工具提供了以下代码:
u1 = (u1 ^ u2); // OK
u1 = (u1 ^ u2) & u3; // NOT OK
u1 = (u1 ^ u2) & 10; // NOT OK
u1 = (u1 ^ u2) & 10U; // NOT OK
u1 = (unsigned char)(u1 ^ u2) & 10U; // OK
u1 = (unsigned char)(u1 ^ u2) & u3; // OK
Run Code Online (Sandbox Code Playgroud)
"OK"表示静态分析工具没有抱怨."不OK"指的是静态分析工具没有抱怨 - 声称按位操作的某些操作数不是一个无符号整数.
最后两行的结果表明括号正在引起
一个.要签名的实际类型转换
湾 静态分析工具认为是签名的类型转换
我将向静态分析工具开发人员询问(b).
但在此之前,我想知道C语言是否可以做(a)?
这是一个众所周知的任务,很容易描述:
给定一个文本文件foo.txt和一个排除字符串的黑名单文件,每行一个,生成foo_filtered.txt,它只包含不包含任何排除字符串的foo.txt行.
常见的应用程序是从构建日志中过滤编译器警告,但忽略对不属于您的文件的警告.文件foo.txt是警告文件(本身从构建日志中过滤掉),黑名单文件excluded_filenames.txt,文件名,每行一个.
我知道它是如何在像Perl或AWK这样的过程语言中完成的,我甚至用剪辑,通信和排序等Linux命令组合完成了它.
但我觉得我应该与xargs非常接近,而且看不到最后一步.
我知道如果excluded_filenames.txt中只有1个文件名,那么
grep -v foo.txt `cat excluded_filenames.txt`
Run Code Online (Sandbox Code Playgroud)
会做的.
而且我知道我可以获得每行一个文件名
xargs -L1 -a excluded_filenames.txt
Run Code Online (Sandbox Code Playgroud)
那么如何将这两者合并为一个解决方案,而不使用过程语言中的显式循环?
寻找简单而优雅的解决方案.
[为清晰起见,更新了组织和内容]
真正的问题
对于C来说,帮助程序员在他/她打字的同时,对项目特定的类似printf的调试函数进行安全和正确的调用会有什么好方法?
C宏?C包装函数?代码编辑器宏或模板?其他?
背景问题和答案
许多软件使用printf或类似printf的函数进行调试,无论是出现问题时是临时还是调试日志.但它容易出错.
Q1:我们怎么知道?
A1:静态分析器有printf-mismatch错误的类别 - 这是一类常见的错误 - 我经常看到这些工具在C代码上调出这些警告.
Q2:这个错误的子类是什么?
A2:主要是格式说明符错误,格式说明符号错误.通常真正的错误是相反的:错误的变量类型,或打印输出的错误数量的变量.
Q3:我们为什么关心?
A3:充其量,会导致错误的日志记录信息并阻碍调试.最糟糕的是,崩溃软件.
问题4:有没有人试图对此问题采取任何措施?
A4:当然,虽然我没有看到任何C(而不是C++或其他),例如:
http://www.ddj.com/cpp/184401999?pgno=1 http://mi.eng.cam.ac.uk/~er258/cvd/tag/html/group__printf.html
在这些产品和其他产品中我缺少的是什么,除了现在我正在研究用C语言编写并且需要解决C问题的产品,这是因为它们是事后解决方案.他们能避免碰撞,并能提供的什么地方出了错警示说明,并说出事了,但他们肯定无法猜测程序员的意图(见电除尘器.Q&上述A#2).
Q5:为什么使用printf这么容易出错?
A5:因为编写printf调用需要程序员在一行上混合变量的类型和数量,格式说明符,自由文本字符串常量和标点符号 - 所有这些看起来非常相似.
在“ Windows 7-cmd的pydoc ”上,我遇到以下问题。我准备了一个简单的文档字符串记录的hello.py“ hello world”脚本:
""" This module prints Hello, world
More documentation.
"""
print("Hello, world")
Run Code Online (Sandbox Code Playgroud)
并将其保存在C:\ Python34 \ lib中。
然后使用Window的命令行,将目录更改为C:\ Python34 \ lib,然后运行
pydoc <full path to hello.py>
Run Code Online (Sandbox Code Playgroud)
我的输出是:
Hello, world
Help on module hello:
NAME
hello
DESCRIPTION
This module prints Hello, world
More documentation.
FILE
c:\python34\lib\hello.py
Run Code Online (Sandbox Code Playgroud)
打印文档非常好,但是首先运行程序。
我如何得到它以不运行该程序,仅打印文档?
考虑一个自动构建系统,它将结果存储在数据库中,并通过动态html响应http GET请求提供结果的表格显示.许多不同的用户希望看到结果的不同子集,因此PHP中有解析脚本,每个脚本都接受多个可选的过滤参数和值.例如,(我要离开http部分,所以这里没有人真正点击这个示例网址):
display_results.php?componenent_name = my_comp1&build_type = build_type1&build_owner =弗雷德
即使某些帮助页面上列出了所有可能参数及其允许值的列表,当用户创建请求URL时,他/她可能没有该文档.相反,取决于记忆有效参数(包括其拼写)和允许的值.有时他/她会弄错.
题
从最终用户可用性和开发人员可维护性的角度来看,以下哪个选项最适合响应此类用户错误:
例如,如果数据库包含build_type1和fred和joe的数据,则为三个组件(称为comp1,comp2和comp3)和用户(错误地)写入:
display_results.php?name = comp1,comp2&build_type = build_type1&build_owner = john
我将可用性定义为与广泛使用的,表现良好的Web应用程序的一致性 - 如果用户对那些他们对我正在描述的应用程序感到满意的人感到满意.
我问这个问题是因为我是这类脚本的关键用户,提出了大量的增强请求,并希望得到一些支持以进一步请求.
===关于界面 - 自由格式或"构建器页面".是的,我说的是自由形式.系统中有一个"构建器页面",但(a)它从未提供所有用户似乎想要的所有选项,(b)我无法完成"创建永久链接"增强请求.
===感谢您选择的答案 - 评论中没有足够的空间:
谢谢@ pygorex1!您给出了一个答案,将我的问题置于众所周知的软件构造 - API的上下文中.并且给出了一个很好的(如果可能夸大;-))违反这些原则的影响的例子.最后,有些东西一直困扰着我关于这些脚本的API,当你提到"自我记录"时,你就把它连接起来了.困扰我的是,当有很少的文档(因为它保持最新的成本很高)并且部分结果返回用户错误(我的!)时,我没有学到任何关于系统的知识."自我记录"可能是您推荐的错误处理设计的最简洁的理由.更容易出售给用户和维护者!