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 i的label,而不是整数?我们什么时候使用&& 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) 与之相比,这两个文件显示不同
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
AABBCCDCCBBAAEAABBCCRun 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
AABBCCDCCBBAAEAABBCCRun Code Online (Sandbox Code Playgroud)
该文本最初来自一个解决竞赛问题的程序.D_out.txt文件是原始判断输出,d_out.txt是我编译的程序输出,用于解决该问题.我试图找到小的差异,但没有得到.
var aa: (()?) = (john.residence?.address = someAddress)
var bb: ()? = john.residence?.printNumberOfRooms()
Run Code Online (Sandbox Code Playgroud)
这是为了区分是否只有零?
int readint(__packed int *data)
{
return *data;
}
Run Code Online (Sandbox Code Playgroud)
我__packed在struct声明中看到了避免填充的属性。但是,__packed在函数参数中使用属性有什么好处。
该作者说,他已经习惯__packed告诉整数可能不对齐的编译器。这是什么意思?
编辑:以下是否适用于gcc编译器
int readint(__attribute__((packed)) int *data)
{
return *data;
}
Run Code Online (Sandbox Code Playgroud) 从头文件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) 我想设置光标位置以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) #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使用插件库与低级 Linux 内核驱动程序进行交互plugin.so。我使用打开 DLL dlopen()。我有一个信号处理程序,在收到信号dlclose()时SIGINT调用。dlclose()代码审查后,我收到了不能从信号处理程序调用的反馈注释。如果是,为什么会这样?
存在未知深度的不平衡二叉树.具有两个子节点的节点的数量由表示T2.仅具有一个子T1节点的节点由叶节点表示,并且叶节点由表示L.如果考虑到T1 = m和T2 = n节点,那么你可以定义一个数学函数f(m, n),其给出的叶节点L个?
例如,在下面的树T2中m = 3,总T1节点数和总节点数是n = 2.叶节点的数量L = f(m,n) = 4.你能找到一个数学函数f(m,n),它给出了所有树的叶子节点数量吗?

为了进行常规修改,我通常使用以下命令编辑子目录中的所有文件:
for i in `ls`; do vim $i; done
Run Code Online (Sandbox Code Playgroud)
现在,我想在命令提示符之间退出VIM,但VIM不允许我.之后:quit它打开并编辑下一个文件.如何完全退出vim?
我认为一个解决方案可能是shell从vim使用:!bash和执行,killall vim但这会杀死我在其他终端中连接的其他VIM会话.有没有干净的方法来做到这一点?
我在一个驱动程序中声明了一个静态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) 我正在编写一个程序来使用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.有人可以帮我修改上面的程序以获得正确的结果.另外, …
#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显示错误以及如何解决它?