function foo() {}
var bar = foo <| function() {};
Run Code Online (Sandbox Code Playgroud)
这是我第一次见到这样的东西.什么<|意思?
资料来源:https://github.com/allenwb/ESnext-experiments/blob/master/ST80collections-exp1.js
我正在思考(因此我正在寻找一种方法来学习这个,而不是更好的解决方案),如果有可能在结构中获得一个位数组.
让我举一个例子来证明.想象一下这样的代码:
#include <stdio.h>
struct A
{
unsigned int bit0:1;
unsigned int bit1:1;
unsigned int bit2:1;
unsigned int bit3:1;
};
int main()
{
struct A a = {1, 0, 1, 1};
printf("%u\n", a.bit0);
printf("%u\n", a.bit1);
printf("%u\n", a.bit2);
printf("%u\n", a.bit3);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,我们在结构中包含4个单独的位.它们可以单独访问,将位操作的工作留给编译器.我想知道的是,如果这样的事情是可能的:
#include <stdio.h>
typedef unsigned int bit:1;
struct B
{
bit bits[4];
};
int main()
{
struct B b = {{1, 0, 1, 1}};
for (i = 0; i < 4; ++i)
printf("%u\n", b.bits[i]);
return 0; …Run Code Online (Sandbox Code Playgroud) 我实际上正在阅读LFS书籍(版本7.1),我在第53页被阻止.尝试编译gcc,我尝试了以下命令:
./configure --target=$LFS_TGT --prefix=$LFS/build/gcc-build --disable-nls\
--disable-shared --disable-multilib --disable-decimal-float --disable-threads\
--disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath\
--disable-target-libiberty --disable-target-zlib\
--enable-languages=c\
--without-ppl --without-cloog\
--with-mpfr-include=$LFS/source/mpfr/src
--with-mpfr-lib=$LFS/source/mpfr/src/.libs\
--with-gmp-include=/mnt/LFS/source/gmp\
--with-gmp-lib=/mnt/LFS/source/gmp/.libs\
--with-mpc-include=/mnt/LFS/source/mpc/src\
--with-mpc-lib=/mnt/LFS/source/mpc/src/.libs
Run Code Online (Sandbox Code Playgroud)
运行gcc的配置脚本(当然我已经编译了mpfr,mpc和gmp).但是一旦我发布:
make -j4
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
checking for suffix of object files... configure: error: in `/mnt/LFS/source/gcc-4.6.2/x86_64-lfs-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
Run Code Online (Sandbox Code Playgroud)
我试图谷歌为它,并尝试了我找到的解决方案但没有任何效果.有谁知道我为什么会收到这个错误?
我认为这可能是一个经典问题,但我不知道答案.一个程序可以输出自己的副本,如果有的话,是否有一个简短的程序来执行此操作?
我不接受"空程序"作为答案,我不接受有权访问自己的源代码的程序.相反,我在想这样的事情:
int main(int argc, char** argv){ printf("int main(argc, char** argv){ printf...
Run Code Online (Sandbox Code Playgroud)
但我不知道如何继续......
是否可以在用户空间和内核空间之间共享信号量(或任何其他同步锁)?命名的POSIX信号量具有内核持久性,这就是为什么我想知道是否有可能从内核上下文创建和/或访问它们.
由于有关正常使用POSIX信号量的大量信息,搜索互联网并没有多大帮助.
我正在为实时系统开发一个统一的界面,我在其中添加了一些书籍,由信号量保护.这些书籍保留是在资源分配和解除分配上完成的,这是在非实时环境中完成的.
使用RTAI,等待和发布信号量的线程需要处于实时上下文中.这意味着使用RTAI的命名信号量意味着在用户空间中的每个等待/发布之间切换实时和非实时上下文,更糟糕的是,为内核空间中的每个sem/wait创建一个短实时线程.
我正在寻找的是一种在内核和用户空间之间共享正常Linux或POSIX信号量的方法,这样我就可以安全地在非实时环境中等待/发布它.
任何有关此主题的信息将不胜感激.如果这是不可能的,你还有其他任何想法如何完成这项任务?1
1一种方法是添加系统调用,在内核空间中具有信号量,并让用户空间进程调用该系统调用,并且信号量将全部在内核空间中进行管理.如果我不是因为这个而不必修补内核,我会更高兴.
为什么我们不能使用双指针来表示二维数组?
arr[2][5] = {"hello","hai"};
**ptr = arr;
Run Code Online (Sandbox Code Playgroud)
这里为什么双指针(**ptr)在这个示例中不起作用?
如果你的内核模块崩溃,你很幸运,你会得到一个带有大量信息的日志,例如寄存器中的值等.一个这样的信息是堆栈跟踪(核心转储也是如此,但我最初问这个内核模块).举个例子:
[<f97ade02>] ? skink_free_devices+0x32/0xb0 [skin_kernel]
[<f97aba45>] ? cleanup_module+0x1e5/0x550 [skin_kernel]
[<c017d0e7>] ? __stop_machine+0x57/0x70
[<c016dec0>] ? __try_stop_module+0x0/0x30
[<c016f069>] ? sys_delete_module+0x149/0x210
[<c0102f24>] ? sysenter_do_call+0x12/0x16
Run Code Online (Sandbox Code Playgroud)
我的猜测是,+<number1>/<number2>它与发生错误的函数的偏移量有关.也就是说,通过检查这个数字,或许可以查看汇编输出,我应该能够找到发生此错误的行(更好的是,指令).那是对的吗?
我的问题是,这两个数字究竟是什么?你如何利用它们?
这可以被认为是这个问题的扩展(我只对C感兴趣,但添加C++来完成扩展)
6.3.2.3.3中的C11标准说:
值为0的整型常量表达式或此类表达式转换为类型
void *称为空指针常量.
我个人对此的看法是0并且(void *)0表示空指针,其整数值实际上可能不是0,但是不包括0强制转换为任何其他类型.
但是,标准然后继续:
如果将空指针常量转换为指针类型,则生成的指针称为空指针,...
它包含(int *)0为空指针,因为强制转换是一种显式转换(C11,6.3),它在转换方法下列出.
然而,令我惊讶的是以下短语
...或者这样的表达式转换为
void *...
有了上面的语义,这句话似乎完全没用.问题是,这句话完全没用吗?如果没有,它有什么影响?因此,是否(int *)0为空指针?
另一个可以帮助讨论的问题如下.被(long long)123视为"123转换为long long",或"123与类型long long".换句话说,有没有转换(long long)123?如果没有,则上面的第二个引用不包括(int *)0为空指针.
c ×5
c++ ×2
gcc ×2
.a ×1
algorithm ×1
compression ×1
file ×1
git ×1
internals ×1
javascript ×1
linker ×1
linux ×1
linux-kernel ×1
null-pointer ×1
operators ×1
quine ×1
semaphore ×1
stack-trace ×1
syntax ×1