相关疑难解决方法(0)

Perl的隐藏功能?

Perl中有哪些非常有用但却深奥的语言功能,你实际上可以用来做有用的工作?

指南:

  • 尝试限制Perl核心的答案,而不是CPAN
  • 请举例和简短说明

其他语言的隐藏功能隐藏功能:

(这些都来自Corion的回答)

  • C
    • 达夫的装置
    • 便携性和标准性
  • C#
    • 用于以空格分隔的列表和字符串的引号
    • 可替换的命名空间
  • Java的
    • 静态初始化剂
  • JavaScript的
    • 职能是一等公民
    • 阻止范围和关闭
    • 通过变量间接调用方法和访问器
  • 红宝石
    • 通过代码定义方法
  • PHP
    • 普遍的在线文档
    • 魔术方法
    • 符号引用
  • 蟒蛇
    • 一行值交换
    • 能够使用您自己的功能替换核心功能

其他隐藏的功能:

运营商:

引用结构:

语法和名称:

模块,Pragma和命令行选项:

变量:

perl hidden-features

143
推荐指数
39
解决办法
6万
查看次数

你最喜欢的C编程技巧是什么?

例如,我最近在linux内核中遇到过这个问题:

/* Force a compilation error if condition is true */
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

所以,在你的代码中,如果你有一些必须的结构,比如8个字节的大小,可能是因为一些硬件限制,你可以这样做:

BUILD_BUG_ON((sizeof(struct mystruct) % 8) != 0);

除非struct mystruct的大小是8的倍数,否则它将不会编译,如果它是8的倍数,则根本不会生成运行时代码.

我知道的另一个技巧是"Graphics Gems"一书,它允许单个头文件在一个模块中声明和初始化变量,而在使用该模块的其他模块中,只是将它们声明为externs.

#ifdef DEFINE_MYHEADER_GLOBALS
#define GLOBAL
#define INIT(x, y) (x) = (y)
#else
#define GLOBAL extern
#define INIT(x, y)
#endif

GLOBAL int INIT(x, 0);
GLOBAL int somefunc(int a, int b);

有了它,定义x和somefunc的代码可以:

#define DEFINE_MYHEADER_GLOBALS
#include "the_above_header_file.h"

而仅使用x和somefunc()的代码可以:

#include "the_above_header_file.h"

所以你得到一个头文件,它声明了需要它们的全局变量和函数原型的实例,以及相应的extern声明.

那么,你最喜欢的C编程技巧是什么?

c

134
推荐指数
20
解决办法
11万
查看次数

WPF和XAML的隐藏功能?

以下是针对各种语言讨论的大量隐藏功能.现在我好奇XAML和WPF的一些隐藏功能?

我发现的是ListView的标题点击事件

<ListView x:Name='lv' 
      Height="150" 
      GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
Run Code Online (Sandbox Code Playgroud)

未列出GridViewColumnHeader.Click属性.

到目前为止的一些相关功能:

也可以看看:

  1. C#的隐藏功能
  2. Python的隐藏功能
  3. ASP.NET的隐藏功能
  4. Perl的隐藏功能
  5. Java的隐藏功能
  6. VB.NET的隐藏功能
  7. PHP的隐藏功能
  8. Ruby的隐藏功能
  9. C的隐藏功能
  10. 等等........

wpf xaml hidden-features

123
推荐指数
20
解决办法
3万
查看次数

Bash的隐藏功能

Shell脚本通常用作粘合剂,用于自动化和简单的一次性任务.您最喜欢的Bash shell /脚本语言的"隐藏"功能有哪些?

  • 每个答案一个功能
  • 举一个示例和该功能的简短描述,而不仅仅是文档的链接
  • 使用粗体标题作为第一行标记要素

也可以看看:

bash shell scripting hidden-features

72
推荐指数
23
解决办法
4万
查看次数

是否可以将标签的地址存储在变量中并使用goto跳转到它?

我知道每个人都讨厌搞砸.在我的代码中,由于我考虑过并且很满意的原因,他们提供了一个有效的解决方案(即我不是在寻找"不要那样做"作为答案,我理解你的预订,并理解我为什么使用它们无论如何).

到目前为止,它们一直很棒,但我希望以这样的方式扩展功能,这要求我基本上能够存储指向标签的指针,然后再转到它们.

如果此代码有效,它将代表我需要的功能类型.但它不起作用,30分钟的谷歌搜索没有透露任何东西.有没有人有任何想法?

int main (void)
{
  int i=1;
  void* the_label_pointer;

  the_label:

  the_label_pointer = &the_label;

  if( i-- )
    goto *the_label_pointer;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c label pointers goto memory-address

53
推荐指数
8
解决办法
3万
查看次数

Clojure的隐藏功能

您发现自己使用哪些鲜为人知但有用的Clojure功能?随意分享小技巧和习语,但试着限制你自己的核心和贡献.

我在这些类似问题的答案中找到了一些非常有趣的信息:

对于其他语言,还有更多的"隐藏功能"问题,所以我认为为Clojure设置一个也很好.

clojure

27
推荐指数
5
解决办法
2万
查看次数

在C语言中在构建时ASSERT表达式的方法

我正在整理一些旧的代码,这些代码使用"幻数"来设置硬件寄存器,我想使用常量而不是这些数字来使代码更具表现力(实际上它们将映射到名称/用于记录寄存器的值).

但是,我担心随着变化的数量,我可能会打破神奇的数字.这是一个简化的例子(寄存器集更复杂):

const short mode0 = 0;
const short mode1 = 1;
const short mode2 = 2;

const short state0 = 0;
const short state1 = 4;
const short state2 = 8;
Run Code Online (Sandbox Code Playgroud)

而不是:

set_register(5);
Run Code Online (Sandbox Code Playgroud)

我们有:

set_register(state1|mode1);
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是构建时间版本:

ASSERT(5==(state1|mode1));
Run Code Online (Sandbox Code Playgroud)

更新

@Christian,感谢快速响应,我对C/non-boost环境的答案感兴趣,因为这是驱动程序/内核代码.

c refactoring assert static-assert

25
推荐指数
8
解决办法
2万
查看次数

单个"if"语句在紧密循环中有多大影响(时间)?

我正在使用C++开发一个应用程序,它使用紧密循环来迭代FSM中的状态.现在,由于紧凑的循环,它使用100%的CPU,我们的客户不喜欢这样.我想尝试sleep(1)在紧密的循环中放松它,但是我们担心这会让我们的大客户(状态变化非常快!)在状态之间睡得太久.我在考虑尝试这样的事情:

if(smallcustomer)
{
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

并且smallcustomer会在程序启动时在其他地方定义.这种"如果"的陈述是否会像睡眠那样减慢速度,并且打败自己的目的?

c++ loops if-statement

4
推荐指数
1
解决办法
3025
查看次数

switch (...) while (0) 的意义是什么?

我最近发现这switch (...) while (0) {}在 C 中是合法的(此处),但我找不到关于这件事的解释。
我在互联网上唯一一次看到这个是在混淆的 GitHub 存储库中,没有任何解释。

我所有的研究显然都给了我关于 while 或 switch 循环的结果,甚至没有提到这种语法,所以我想这更多是合法的,但非常罕见且可能无用,是对标准的滥用。谁能帮助我理解这一点?

编辑:正如@phuclv答案中所解释的,switch语句需要一个选择语句,它可以是括号内的一些代码(在这种情况下......可能是case语句)或一个带有自己的括号等的循环,这意味着这个在 C 中是合法的:

switch (...) while (...) switch (...) {}
Run Code Online (Sandbox Code Playgroud)

switch根本不关心后面的语句,它似乎只寻找 case(s) 和/或默认值。

switch (1) while (0) {
    puts("Not executed");
}
Run Code Online (Sandbox Code Playgroud)

puts语句不会被执行,因为没有 case/default,所以 switch 在这里基本上没有用。你可以在Compiler Explorer上看到它,GCC 给出警告并删除了开关。

但是,请注意:

#include <stdio.h>

int main(void) {
    switch (1) while (1) switch (0) {
        case 1:
        puts("hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

没有显示任何内容,程序立即退出,因为 switch (1) 没有 case 1 或 default 语句。如果我们添加一个: …

c switch-statement

4
推荐指数
1
解决办法
188
查看次数

网上有可用的C语言汇编吗?

网上有可用的C语言汇编吗?我觉得很难用精确的技术术语解释我想说的话.

c

3
推荐指数
1
解决办法
401
查看次数