相关疑难解决方法(0)

C++中的" - >"运算符是什么?

看完后隐藏功能和C++/STL的暗角comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作.

这是代码:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设这是C,因为它也适用于GCC.标准中定义了哪里,它来自何处?

c++ code-formatting standards-compliance operators

8590
推荐指数
27
解决办法
75万
查看次数

有什么区别!=和=!在Java?

我正在寻找一些模拟的OCJP问题.我遇到了一个非常莫名其妙的语法.这里是:

class OddStuff {
    public static void main(String[] args) {
        boolean b = false;
        System.out.println((b != b));// False
        System.out.println((b =! b));// True
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么输出在!=和之间变化=!

java syntax

56
推荐指数
3
解决办法
4万
查看次数

如何解析通过/ proc文件传递给内核模块的大量数据?

编辑:我发现seq_file很容易从内核向用户空间写入大量数据.我正在寻找的是相反的; 一个API,便于从用户空间读取大量数据(多个页面).

编辑2:我正在实现一个<stdio.h>作为内核模块的端口,它能够打开/proc(以及后来的其他虚拟文件系统),类似于FILEs并处理类似的输入和输出<stdio.h>.你可以在这里找到这个项目.


我发现了很多关于内核如何将大量数据写入/ proc(用于用户空间程序)的问题,但没有其他方面.让我详细说明:

这个问题基本上是关于输入被标记化的算法(例如ints或混合int和字符串等),假设数据可能在多个缓冲区之间被打破.

例如,假设以下数据被发送到内核模块:

12345678 81234567 78123456 67812345 5678 1234 45678123 3456 7812 23456781
Run Code Online (Sandbox Code Playgroud)

并且为了这个例子,假设Linux提供/ proc处理程序的页面大小是20字节(相对于真正的4KB).

从/ proc(在内核模块中)读取数据的函数然后查看数据:

call 1:
"12345678 81234567 78"
call 2:
"123456 67812345 5678"
call 3:
" 1234 45678123 3456 "
call 4:
"7812 23456781"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当78在第一次调用中读取时,它应该在下一帧之前处理,以便它决定78帧之间是整数还是一帧.

现在我发现seq_files显然只是在内核想要数据写入用户而不是读取时(或者可能是HOWTO写得非常糟糕).

我做了什么

到目前为止,我已经提出了以下解决方案(我是从记忆中写的,所以我可能会错过几次错误检查,但请耐心等待):

在初始化阶段(比如说init_module …

c linux buffer kernel procfs

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

实现不同但相似的结构/功能集而无需复制粘贴

我正在为C(这里)实现一组常见但又不那么简单(或容易出错)的数据结构,并且只是提出了让我思考的想法.

简而言之,问题是,实现两个使用类似算法但具有不同接口的结构的最佳方法是什么,而无需复制粘贴/重写算法?最好的,我的意思是最可维护和可调试.

我认为很明显为什么你不想要同一算法的两个副本.

动机

假设你有一组结构(称之为map),带有一组相关的函数(map_*()).由于地图需要将任何东西映射到任何东西,我们通常会使用a void *keyvoid *data.然而,认为地图上的intint.在这种情况下,您需要将所有密钥和数据存储在另一个阵列中并将其地址提供给map,这不太方便.

现在想象一下,如果有一个类似的结构(称之为mapc,C为"副本")期间初始化需要sizeof(your_key_type)sizeof(your_data_type)并给予void *keyvoid *data上插入,它将使用memcpy的密钥和数据复制在地图上,而不是仅仅维持指针.用法示例:

int i;
mapc m;
mapc_init(&m, sizeof(int), sizeof(int));
for (i = 0; i < n; ++i)
{
    int j = rand();  /* whatever */
    mapc_insert(&m, &i, &j);
}
Run Code Online (Sandbox Code Playgroud)

这是非常好的,因为我不需要保留另一个is和js 数组.

我的想法

在上面的例子,mapmapc有非常密切的关系.如果你想想看,map和 …

c interface abstract-data-type data-structures

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

在Java中使用= +运算符?

我有以下代码:

public class Operators {
    public static void main(String[] args) {
        int i =+ 2;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

执行后,我得到以下输出:2

那么=+运营商在这里做了什么呢?

编辑:

正如一些回答,这是分配+2i,考虑下面的代码:

public class Operators {
    public static void main(String[] args) {
        int i =- -2;
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中,输出应该是-2.但我得到了2

所以我想,它是-(-2),它给出了2.吗?

java operators

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