我为VIM安装了YCM和syntastic,通常它们工作正常,但是当我检测到代码中的一些错误时我遇到了问题,它表明找不到一些头文件(这是我的项目头文件).
我的目录树显示如下:
TOP
??? debug
? ??? debug.c
? ??? debug.h
? ??? debug.mk
? ??? instrument.c
??? driver
? ??? driver.c
? ??? driver_ddi.c
? ??? driver_ddi.h
? ??? driver.h
? ??? driver.mk
??? include
? ??? common.h
??? libs
??? Makefile
??? mw
? ??? manager.c
? ??? mw.mk
??? root
??? main.c
??? root.mk
Run Code Online (Sandbox Code Playgroud)
我复制了一个.ycm_extra_conf.py到TOP,同时,我也会在TOP 生成tag并cscope归档,因此每次我在TOP上打开文件,如:
howchen@host:~/Work/c/sample/src
-> gvim ./driver/driver.c
Run Code Online (Sandbox Code Playgroud)
确保每次我都可以在VIM中添加tag和cscope归档.问题是,如果我打开driver.c,其中包含头文件:driver.h,driver_ddi.h, …
我正在使用bépo键映射(http://bepo.fr)并寻求完美的vim映射.
到目前为止,我使用了很长的noremap列表,但是对于许多绑定(例如,运动aw或Ctrl+ r),第一次击键很好地重新映射而不是其他的,我认为这是预期的行为,但这不是我需要的.
理想情况下,map除了键入文本(在插入模式下和键入替换例程)时,我的键盘将在更高级别(命令之前)完全重新映射.我正在寻找的似乎是langmap,但我使用它有问题.
我将这个langmap添加到我的.vimrc中,看起来很完美,但它破坏了我的一些插件.SuperTab现在插入<Plug>SuperTabForward时Tab在插入模式下按下,我t<SNR>24_SelectCompletion(1)按下回车键时.
有人知道如何解决这个langmap问题或更好地重新映射我的键盘吗?
一位同事写了这样一个函数(评论是我写的):
static void foo(void *arg)
{
//arg is NOT global variable
arg = arg;
// call other function, but doesn't use arg
foo2();
}
Run Code Online (Sandbox Code Playgroud)
是否有理由编写这样的代码?它有一些特殊用途吗?
我的同事使用Ubuntu并且我使用openSUSE,我们使用相同的makefile编译相同的源代码,我的环境运行良好,但我的同事不能,总是输出无法识别的-e选项.我们检查makefile,只查找echo命令使用-e选项.
剂量Ubuntu的回声功能与其他功能不同?
在makefile中+++++更新,echo定义为:
TOOLSDIR =
ECHO = $(TOOLSDIR)echo -e
$(TOOLSDIR)是工具的目录,这个make文件可以检测编译环境,如果linux或者有CYGWIN:
$(TOOLSDIR)是空的,如果是windows,它会转到WIN32版本的echo工具目录,如:
TOOLSDIR = $(subst /,\,$(MAKEDIR)/tools/WIN32/)
在我们执行make之后,ubuntu将输出:
致命错误:L3900U:无法识别的选项'-e'.
但是,openSUSE没有此错误
++++更新echo -e
我在ubuntu中编写了一个测试makefile
all:
echo -e hello
Run Code Online (Sandbox Code Playgroud)
它输出:
echo -e你好
你好
++++更新makefile测试在openSUE(12.1)和ubuntu(12.04)
all:
echo -e "hello 1"
echo -e hello 2
echo -e he\nllo3
echo -e "he\nllo4"
Run Code Online (Sandbox Code Playgroud)
echo -e"你好1"
你好1
echo -e你好2
你好2
echo -e he \nllo3
henllo3
echo -e"he \nllo4"
他
llo4
echo -e"你好1"
你好1
echo -e你好2
你好2 …
我尝试使用 gdb 来调试带有 coredump 的代码,但我遇到了:
Missing separate debuginfo for /lib/libc.so.6
Try: zypper install -C "debuginfo(build-id)=c4b9060b36834391b7b73976d38302a7584ae40e"
Missing separate debuginfo for /lib/ld-linux.so.2
Try: zypper install -C "debuginfo(build-id)=39c1043d2fcf5b72a2199cfb765d020b1faeb863"
Missing separate debuginfo for
Try: zypper install -C "debuginfo(build-id)=753a47afb9757471dc4823893adf607eb014b82f"
Missing separate debuginfo for /lib/libc.so.6
Try: zypper install -C "debuginfo(build-id)=c4b9060b36834391b7b73976d38302a7584ae40e"
Missing separate debuginfo for /lib/ld-linux.so.2
Try: zypper install -C "debuginfo(build-id)=39c1043d2fcf5b72a2199cfb765d020b1faeb863"
Run Code Online (Sandbox Code Playgroud)
然后我为 glibc 安装了 debuginfo 并将 glibc 更新到最新版本,我再次尝试 gdb,它仍然有一个信息:
Missing separate debuginfo for
Try: zypper install -C "debuginfo(build-id)=753a47afb9757471dc4823893adf607eb014b82f"
Run Code Online (Sandbox Code Playgroud)
但它没有提到遗漏了哪一部分。
我的 GDB 版本是:
-> gdb --version
GNU gdb …Run Code Online (Sandbox Code Playgroud) -前提:
我知道它有很多方法可以忽略此警告,但我确实需要修复它,但不仅仅是为编译器添加一些标志来忽略它,因为我可以CFLAG在本地进行此 makefile修改,但无法更改编译/构建策略由于公司质量控制原因。这个问题我只想讨论谁来解决它,但不要忽略它们,非常感谢!
同时,不仅某些变量从未被引用过,而且还有警告:
function 'xxx' was declared but never referenced
Run Code Online (Sandbox Code Playgroud)
头文件中的类似问题,它有一些静态函数,仅在一个 c 文件中使用,但许多其他 c 文件包含此头文件。
此外,此代码运行在具有严重内存消耗的专用目标上,这意味着我需要处理 ROM 和 RAM 中的每一位。
-------问题如下所示-----------
我目前构建了一些由供应商提供的代码,其中包含很多警告,因为我想要一个无警告构建,因此,我将-Werrorforgcc和--diag_error=[error_ref_number]for armcc.
经过上面的makefile修改后,我目前遇到的最多的警告是
variable 'xxx' was declared but never referenced
Run Code Online (Sandbox Code Playgroud)
它是由以下编码风格引起的:
在 中veryBIG.h,它定义了一些变量,例如(只是例如,但供应商的代码具有完全相同的方式):
static const int a = 10;
static const int b = 20;
static const int c = 30;
...
static const int z = xx;
Run Code Online (Sandbox Code Playgroud)
但是,许多 c 文件都包含这个 BIG 头文件,但只有这些 c 文件中的一个使用上述变量之一,例如a.c将使用变量 …
当我make在Ubuntu终端中使用type时,我得到:
main.cc:5:30: fatal error: folder/file.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
该文件夹存在于工作目录中,file.h存在于指定的文件夹中.
当我键入ls它时,它也列出了我的工作目录中的文件夹和文件.
奇怪的是,当我在geany中打开它并要求它在中找到该文件时
#include <folder/file.h>
Run Code Online (Sandbox Code Playgroud)
它发现它没有问题但是当它构建它时我得到了错误.
我需要设置一个标志,所以它包含文件夹吗?如果是这样,那看起来到底是什么样的?
我知道如何通过使用将文件格式从dos更改为unix dos2unix,但是如何在目录树下更改所有文件.可以dos2unix递归更改文件吗?
例如,我有一些如下文件:
TOPDIR
|
+-----dir1
| |
| +---file1,file2, file3
|
+-----dir2
|
+---file4,file5
Run Code Online (Sandbox Code Playgroud)
如何一次更改它们,或使用一些shell脚本?
我怎么知道gcc的返回值?
例如,我有一个c文件test.c,我只是gcc test.c在终端中运行.它可以报告当前编译是否遇到一些错误,但是如何知道gcc的这次编译过程的返回值?
现在我知道1手段有错误,但0不仅会返回警告而且还会编译好,如果有错误怎么办?如果我使用-Werror,它可能会停止编译,我不想停止编译