小编man*_*m-n的帖子

错误:使用标签时使用&&运算符时未定义

int main()
{
        int i = 0;
        int *p = &i;
        int *q = &&i;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用gccon 编译时Linux,我收到错误

addr.c: In function ‘main’:
addr.c:6:2: error: label ‘i’ used but not defined
Run Code Online (Sandbox Code Playgroud)

为什么编译器处理int ilabel,而不是整数?我们什么时候使用&& operator

编辑:好的,我可以在一定程度上理解答案,但是你可以从"arch/arm/include/asm/processor.h"解释下面的宏定义.它没有说什么label,但评论说,它可以返回" program counter"

/*
 * Default implementation of macro that returns current
 * instruction pointer ("program counter").
 */
#define current_text_addr() ({ __label__ _l; _l: &&_l;})
Run Code Online (Sandbox Code Playgroud)

c c++ linux gcc operator-overloading

4
推荐指数
2
解决办法
5754
查看次数

当没有时,差异显示差异

与之相比,这两个文件显示不同

diff d_out.txt D_out.txt
Run Code Online (Sandbox Code Playgroud)

我正在使用Ubuntu(12.10)终端.

d_out.txt的内容

ABCADBACDABCADBACDAB
ABCABCABCABCABCABCAB
CRASH
CRASH
CRASH
ABCDCABADCDBABCDCABA
ABCDBACBDABCDBACBDAB
ABCCABBCAABCCABBCAAB
ABCDDCBAABCDDCBAABCD
CRASH
CRASH
ABCDEEDABCCBEDAADCBE
ABCCAABCCAABCCAABCCA
ABBCCABBCCABBCCABBCC
ABCDEFFABCDEEFABCDDE
AABCDEFFABCDEEFABCDD
ABBCDEFAABCDEFFABCDE
ABBCCDDEDDCCBBABBCCD
CRASH
CRASH
ABCDEFGBADCFEBGDAFCB
ABCDEBADCBEDABCDEBAD
ABCDBADCABCDBADCABCD
ABCDEFGHIABCDEFGHIAB
ABCDEFGHIJABCDEFGHIJ
ABCDEFGHIJKABCDEFGHI
ABCDEFGHIJKLMNOPQRSA
CRASH
AABBCCDCCBBAAEAABBCC
AABBCCDCCBBAAEAABBCC
Run Code Online (Sandbox Code Playgroud)

D_out.txt的内容

ABCADBACDABCADBACDAB
ABCABCABCABCABCABCAB
CRASH
CRASH
CRASH
ABCDCABADCDBABCDCABA
ABCDBACBDABCDBACBDAB
ABCCABBCAABCCABBCAAB
ABCDDCBAABCDDCBAABCD
CRASH
CRASH
ABCDEEDABCCBEDAADCBE
ABCCAABCCAABCCAABCCA
ABBCCABBCCABBCCABBCC
ABCDEFFABCDEEFABCDDE
AABCDEFFABCDEEFABCDD
ABBCDEFAABCDEFFABCDE
ABBCCDDEDDCCBBABBCCD
CRASH
CRASH
ABCDEFGBADCFEBGDAFCB
ABCDEBADCBEDABCDEBAD
ABCDBADCABCDBADCABCD
ABCDEFGHIABCDEFGHIAB
ABCDEFGHIJABCDEFGHIJ
ABCDEFGHIJKABCDEFGHI
ABCDEFGHIJKLMNOPQRSA
CRASH
AABBCCDCCBBAAEAABBCC
AABBCCDCCBBAAEAABBCC
Run Code Online (Sandbox Code Playgroud)

该文本最初来自一个解决竞赛问题的程序.D_out.txt文件是原始判断输出,d_out.txt是我编译的程序输出,用于解决该问题.我试图找到小的差异,但没有得到.

linux diff

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

什么(()?)和()?快速意味着什么?

var aa: (()?) = (john.residence?.address = someAddress)
var bb: ()? = john.residence?.printNumberOfRooms()
Run Code Online (Sandbox Code Playgroud)

这是为了区分是否只有零?

optional swift

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

__packed 属性在函数参数中有什么用

int readint(__packed int *data)
{
    return *data;
}
Run Code Online (Sandbox Code Playgroud)

__packedstruct声明中看到了避免填充的属性。但是,__packed在函数参数中使用属性有什么好处。

作者说,他已经习惯__packed告诉整数可能不对齐的编译器。这是什么意思?

编辑:以下是否适用于gcc编译器

int readint(__attribute__((packed)) int *data)
{
    return *data;
}
Run Code Online (Sandbox Code Playgroud)

c padding armcc

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

#if 0 && defined(_LP64)是如何成立的?

从头文件ncurses.h,#if我认为有什么用处#if 0将始终返回false并且控件总是会出现这个#else部分?

#if 0 && defined(_LP64)
typedef unsigned chtype;
typedef unsigned mmask_t;
#else
typedef unsigned long chtype;
typedef unsigned long mmask_t;
#endif
Run Code Online (Sandbox Code Playgroud)

c c++ macros typedef c-preprocessor

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

如何为stdout设置控制台光标位置

我想设置光标位置以char在控制台屏幕上打印.有没有使用ncurses库的解决方案.

以下示例是否SetConsoleCursorPosition在Linux中有相应的调用:

void print (int x, int y, char c) {
    COORD p = { x, y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), p);
    printf("%c", c);
}
Run Code Online (Sandbox Code Playgroud)

c c++ animation ncurses console-application

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

使用按位移位运算符进行奇怪的等式检查

#include <stdio.h>

int foo(int a, int b)
{
        return ((a>>= b<<= a) ? 1 : 0);
}

void bar(int x, int y)
{
        printf("%d,%d: %s\n",x, y, (foo(x,y) ? "Equal" : "Not Equal"));
}

int main()
{
        bar(0,1);
        bar(4,4);
        bar(3,2);
        bar(9,9);
        bar(-2,-2);
        bar(-8,8);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是

0,1: Not Equal
4,4: Equal
3,2: Not Equal
9,9: Equal
-2,-2: Equal
-8,8: Equal
Run Code Online (Sandbox Code Playgroud)

你能帮我理解函数()中的相等检查是如何foo工作的吗?当一个论点是积极的而另一个是否定的时候,为什 function foo()中的解决方法是为所有情况正确显示结果,即所有消极和正面参数?

编辑:从下面的答案,其他值的结果是:

70,72: Equal
-2,-2: Equal
64,64: Equal
128,32: Equal
256,250: Not …
Run Code Online (Sandbox Code Playgroud)

c c++ linux bit-manipulation operators

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

为什么不能从信号处理程序调用 dlclose()?

我编写了一个用户空间应用程序,其中C使用插件库与低级 Linux 内核驱动程序进行交互plugin.so。我使用打开 DLL dlopen()。我有一个信号处理程序,在收到信号dlclose()SIGINT调用。dlclose()代码审查后,我收到了不能从信号处理程序调用的反馈注释。如果是,为什么会这样?

c c++ linux signals shared-libraries

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

用于查找二叉树中叶节点数的数学函数

存在未知深度的不平衡二叉树.具有两个子节点的节点的数量由表示T2.仅具有一个子T1节点的节点由叶节点表示,并且叶节点由表示L.如果考虑到T1 = mT2 = n节点,那么你可以定义一个数学函数f(m, n),其给出的叶节点L个?

例如,在下面的树T2m = 3,总T1节点数和总节点数是n = 2.叶节点的数量L = f(m,n) = 4.你能找到一个数学函数f(m,n),它给出了所有树的叶子节点数量吗?

在此输入图像描述

algorithm binary-tree data-structures

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

强制vim退出编辑文件列表

为了进行常规修改,我通常使用以下命令编辑子目录中的所有文件:

for i in `ls`; do vim $i; done
Run Code Online (Sandbox Code Playgroud)

现在,我想在命令提示符之间退出VIM,但VIM不允许我.之后:quit它打开并编辑下一个文件.如何完全退出vim?

我认为一个解决方案可能是shell从vim使用:!bash和执行,killall vim但这会杀死我在其他终端中连接的其他VIM会话.有没有干净的方法来做到这一点?

vi vim bash shell for-loop

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

为什么导出的const值由另一个未在原始驱动程序中更新的驱

我在一个驱动程序中声明了一个静态const int变量并导出了该变量符号.在另一个驱动程序中我正在修改该变量.另一个驱动程序打印修改后的值,但原始驱动程序保留原始值.当两个驱动程序看到的变量的虚拟和物理地址都相同时,这怎么可能.这是一个内核bug吗?

[root@localhost bug]# uname -a
Linux localhost.localdomain 3.5.3 #3 SMP Mon Sep 3 21:52:12 IST 2012
i686 i686 i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

[root @ localhost bug] #cat driver.c

#include <linux/module.h>

static const int value = 123;

int init_module()
{
        printk("Base driver (init): value                     = %d\n", value);
        printk("Base driver (init): virtual address of value  = %p\n", (void *)&value);
        printk("Base driver (init): physical address of value = %p\n", (void
*)__pa(&value));
        return 0;
}

void cleanup_module()
{
        printk("Base driver (exit): value                     = %d\n", value); …
Run Code Online (Sandbox Code Playgroud)

c const kernel-module linux-kernel

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

使用main()函数递归

我正在编写一个程序来使用main()函数的递归来计算阶乘.

/* Print factorial */
#include <stdio.h>
#include <stdlib.h>

static char **p;

int main(int argc, char **argv)
{
        int n, rv;
        if (argc < 2) {
                printf("Usage: a.out <value>\n");
                exit(-1);
        }
        n = atoi(argv[1]);
        if (!n) {
                rv = 0;
        } else {
                if (n == 1) {
                        rv = 1;
                } else {
                        n = n - 1;
                        **p = n;
                        main(2, p);
                }
        }
        printf("%d\n", rv);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序编译使用gcc但在执行时,我得到一个分段错误**p = n.有人可以帮我修改上面的程序以获得正确的结果.另外, …

c linux recursion segmentation-fault

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

左值作为条件运算符中赋值的左操作数

#include <stdio.h>
int main()
{
        int a = 1, b;
        a ? b = 3 : b = 4;
        printf("%d, %d", a, b);
        return 0;
}

[user@localhost programs]$ gcc -Wall vol.c
vol.c: In function ‘main’:
vol.c:5:16: error: lvalue required as left operand of assignment
  a ? b = 3 : b = 4;
                ^
Run Code Online (Sandbox Code Playgroud)

我给了左值,b然后为什么gcc显示错误以及如何解决它?

c c++ gcc compiler-errors conditional-operator

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