是的Vim OmniComplete和Vim的智能感知互斥还是互补?我对相互矛盾的术语和实现感到困惑,比如这些C++ OmniComplete和 C++ Intellisence插件.
我不清楚Boost.Thread 1.34.1库中存在哪些链接选项.我在Ubuntu 8.04上,我发现在使用boost_thread或boost_thread-mt在链接编译和运行期间,但我没有在上面链接中看到关于这些或任何其他链接选项的任何文档.
什么Boost.Thread链接选项可用,它们是什么意思?
我使用带有vim的ctags和OmniCppComplete插件.目前,当生成我的标签时,我会为每个库单独执行.对于libc6,我在处理过程中使用以下名为libc6-ignore的文件中的标记/宏列表来忽略:
__attribute__
__attribute_deprecated__
__attribute_format_arg__
__attribute_format_strfmon__
__attribute_malloc__
__attribute_noinline__
__attribute_pure__
__attribute_used__
__attribute_warn_unused_result__
__wur
__THROW
__nonnull+
我错过了我应该忽略的任何其他令牌,在为libstdc ++和boost生成标签时,我是否应该使用相同的列表或不同的列表?
对于任何感兴趣的人,我使用以下代码生成我的标记文件:
# First make sure apt-file is install and then do:
$ sudo apt-file update
# set up tags for libc, the standard C library
$ apt-file list libc6-dev | grep -o '/usr/include/.*\.h'> ~/.vim/tags/libc6-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -I./libc6-ignore -f ~/.vim/tags/libc6 -L ~/.vim/tags/libc6-filelist 
# create tags for stdlibc++ and STL
$ apt-file list libstdc++6-4.4-dev | grep -E -o '/usr/include/.*\.(h|hpp)' > ~/.vim/tags/stdlibcpp-filelist …各种Windows版本都支持哪种SCTP?
它讨论了无法使用void *指针来保存函数指针,因为指向数据的指针和指向函数的指针在某些平台上可能具有不同的大小,并且void *只能保证足够大以保存指向数据的指针.
任何人都可以举一个平台的例子,其中指向数据的指针和指向函数的指针实际上有不同的大小?
我正在运行Ubuntu 8.04并运行命令:
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/stdlibcpp /usr/include/c++/4.2.4/
在我的系统上为标准C++库和STL(libstdc ++)生成一个ctags数据库,以便与OmniCppComplete vim脚本一起使用.这给了我一个非常合理的4MB标签文件,似乎运行得相当好.
但是,当我对安装的Boost标头运行相同的命令时:
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost /usr/include/boost/
我最终得到了一个1.4 GB的标签文件! 我还没有尝试过,但看起来它似乎太大而无法使用.有没有办法为我安装的Boost标头获得更纤薄,更实用的标签文件?
编辑
正如笔记一样,libstdc ++包含TR1,其中包含了许多Boost库.因此,libstdc ++必须有一些奇怪的东西才能出现4 MB的标签文件和Boost最终得到1.4 GB的标签文件.
刚刚在Boost邮件列表上遇到过这个问题:
Boost-users Boost和autocompletion
答案
感谢Neg_EV弄清问题是什么,但是解决问题的方法比他建议的要好得多:
确保apt-file已安装,并运行以下命令
(我将我的库标签保存在〜/ .vim/tags /中):
$ sudo apt-file update
$ apt-file list boost | grep -E -o '/usr/include/.*\.(h|hpp)' | grep -v '/usr/include/boost/typeof/' > ~/.vim/tags/boost-filelist
$ ctags --sort=foldcase --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/boost -L ~/.vim/tags/boost-filelist
我已经升级到Ubuntu 10.04和Boost 1.40,这就是我测试这个解决方案,但据我所知,它应该适用于任何Boost版本.
我需要定义一些模块并在同一个文件中使用它们.不,我不能改变要求.
我想做类似以下的事情:
{
    package FooObj;
    sub new { ... }
    sub add_data { ... }
}
{
    package BarObj;
    use FooObj;
    sub new { 
        ... 
        # BarObj "has a" FooObj
        my $self = ( myFoo => FooObj->new() );
        ...
    }
    sub some_method { ... }
}
my $bar = BarObj->new();
但是,这会产生以下消息:
无法在@INC中找到FooObj.pm ...
BEGIN失败了......
我如何让它工作?
我正在阅读LKMPG(参见第4.1.4节.取消注册设备),我不清楚何时使用这些try_module_get / module_put功能.一些LKMPG示例使用它们,有些则不使用它们.
更令人困惑的是,try_module_get在2.6.24源代码的193个文件中出现了282次,但在Linux设备驱动程序(LDD3)和Essential Linux设备驱动程序中,它们甚至没有出现在单个代码示例中.
我想也许它们与旧register_chrdev接口绑定(由cdev接口取代2.6),但它们只出现在同一个文件中8次:
find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .
那么什么时候使用这些函数是合适的,它们是否与特定接口或一组环境的使用联系在一起?
编辑
我从LKMPG 加载了sched.c示例并尝试了以下实验:
anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594
anon@anon:~$ lsmod | grep sched
sched                   2868  1 
anon@anon:~$ sudo rmmod sched
ERROR: Module sched is …我需要一个绝对的初学者指南来一起使用JUnit和Intellij IDEA 9.x. 我在WinXP上运行JDK 1.6.0_22.我正在寻找以下问题的答案:
我有其他单元测试框架的经验,如PHPUnit和Boost.Test,所以我主要关注在Intellij中设置和运行所有这些的机制.
编辑
我是一个使用Intellij的完整新手.
我来自命令行背景,即在Linux上使用vim和手写make文件的C++ dev.
我已经设法通过命令行编译并运行一些JUnit测试(下载了JUnit 4.8.2并使用了-cp swith),但我有一点时间在Intellij下设置任何东西.我试着查看在线Intellij文档,但没有发现那些非常有用.我查看了Intellij的lib目录,它包含了Junit-4.7.jar.
我真的需要某种快速入门指南,从初始项目创建到成功运行第一个单元测试,一步一步的指示.
在系统调用的手册页中写(2) -
ssize_t write(int fd, const void *buf, size_t count); 
它说如下:
回报价值
成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并
errno进行适当设置.如果count为零且文件描述符引用常规文件,则可能返回0,或者可以检测到错误.对于特殊文件,结果不可移植.
我会将此解释为意味着返回0只意味着没有任何内容被写入,无论出于何种原因.
但是,当处理作为TCP套接字的文件描述符时,UNP中的Stevens将返回值0视为致命错误(这由另一个调用exit(1)短计数的函数包装):
ssize_t /* Write "n" bytes to a descriptor. */
writen(int fd, const void *vptr, size_t n)
{
    size_t      nleft;
    ssize_t     nwritten;
    const char  *ptr;
    ptr = vptr;
    nleft = n;
    while (nleft > 0) {
        if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
            if (nwritten < 0 && errno == EINTR)
                nwritten = 0;       /* and …