小编deS*_*gis的帖子

C预处理器#和##运算符

C99标准文档具有相关的##预处理运算的部分下面的例子:

在以下片段中:

#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)

char p[] = join(x, y); // equivalent to
                       // char p[] = "x ## y";
Run Code Online (Sandbox Code Playgroud)

扩张在不同阶段产生:

join(x, y)
in_between(x hash_hash y)
in_between(x ## y)
mkstr(x ## y)
"x ## y"
Run Code Online (Sandbox Code Playgroud)

换句话说,扩展hash_hash会产生一个新的令牌,由两个相邻的尖锐符号组成,但这个新令牌不是##运算符.

我不明白为什么hash_hash的替换产生##而不是"##"或"#""#".在双哈希播放之前和之后单个哈希有什么作用?

任何回复都非常感谢.

c concatenation c-preprocessor

16
推荐指数
1
解决办法
9910
查看次数

g ++不正确的循环?

我有一个类似于这个的真实世界程序,我将称之为test.cpp:

#include <stdlib.h>

extern void f(size_t i);

int sample(size_t x)
{
     size_t a = x;
     size_t i;  

     for (i = a-2; i>=0; i--) {
           f(i);   
     }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我是一个无限循环.

如果我运行以下命令:

g++ -S -o test.s test.cpp
Run Code Online (Sandbox Code Playgroud)

我得到以下装配顺序:

        .file   "test.cpp"
        .text
        .globl  _Z6samplem
        .type   _Z6samplem, @function
_Z6samplem:
.LFB0:
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $32, %rsp
        movq    %rdi, -24(%rbp)
        movq    -24(%rbp), %rax
        movq    %rax, -8(%rbp)
        movq    -8(%rbp), %rax
        subq    $2, %rax
        movq    %rax, …
Run Code Online (Sandbox Code Playgroud)

c++ g++ disassembly

2
推荐指数
1
解决办法
179
查看次数

方法入口点在类变量中

如何作为类变量安装包含方法入口点的表?

为了澄清,请考虑以下工作代码:

class A(object):

    def go(self, n):
        method = self.table[n]
        method(self)

    def add(self):
        print "add"

    def multiply(self):
        print "multiply"

    table = {
        1: add,
        2: multiply,
        }

>>> q = A()
>>> q.go(1)
add
Run Code Online (Sandbox Code Playgroud)

但是,我不喜欢它.我想在开头提供表格以便于阅读(真实世界的项目要大得多),我不喜欢使用它method(self).我认为这很令人困惑.

我的问题是:有更好的方法还是上面的代码点?

谢谢.

python python-2.x

0
推荐指数
1
解决办法
80
查看次数

标签 统计

c ×1

c++ ×1

c-preprocessor ×1

concatenation ×1

disassembly ×1

g++ ×1

python ×1

python-2.x ×1