小编STe*_*yaK的帖子

GCC可以不抱怨未定义的引用吗?

在什么情况下,GCC 在尝试调用伪造函数时不会抛出"未定义的引用"链接错误消息?

例如,GCC编译和链接此C代码的情况:

void function()
{
    made_up_function_name();
    return;
}
Run Code Online (Sandbox Code Playgroud)

...即使代码中made_up_function_name没有任何地方(不是标题,源文件,声明或任何第三方库).

GCC是否可以在某些条件下接受和编译这种代码,而无需触及实际代码?如果是这样,哪个?

谢谢.

编辑:之前没有任何声明或提及made_up_function_name.这意味着grep -R整个文件系统中的一个显示完整的单行代码.

c gcc compiler-errors compiler-warnings

49
推荐指数
1
解决办法
3万
查看次数

将提交的大块移动到单个rebase中的另一个提交

使用GIT,我想将一个提交的大块移动到另一个,同时使用单个交互式rebase自动保留提交元数据.

例如,有这两个提交:

首次提交X:

  context
+ foo
  context
Run Code Online (Sandbox Code Playgroud)

第二次提交Y:

  context
+ bar
  context
+ baz
  context
Run Code Online (Sandbox Code Playgroud)

我想将bar提交Y中的Hunk 移动到先前的提交X,而不必手动重置作者,提交者,日志等.

我能想到的最简单的方法需要2个交互式的rebase:

  1. 第一个rebase:将Y commit分为Z(bar)和Y'(baz),最后一个commit -c Y用于保留元数据.
  2. 第二次变换:将X和Z一起压入X',并按原样保留Y'.

这将留下这个结果:首先提交X'(与X相同的元数据):

  context
+ foo
  context
+ bar
  context
Run Code Online (Sandbox Code Playgroud)

第二次提交Y'(与Y相同的元数据):

  context
+ baz
  context
Run Code Online (Sandbox Code Playgroud)

git

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

fsync(fd)是否适用于外部程序创建的文件?

我有一个禁用写入缓存的SATA硬盘:

hdparm -W0 /dev/foo
Run Code Online (Sandbox Code Playgroud)

我正在ext4使用这些挂载选项(以及其他)的分区上运行:

data=ordered
auto_da_alloc
Run Code Online (Sandbox Code Playgroud)

Linux内核版本是2.6.32-5-686.

现在,我有一个我无法修改的外部程序,但我知道以下列方式创建一个文件:

int fd = open(path);
write(fd, data, data_size);
close(fd);
Run Code Online (Sandbox Code Playgroud)

即它在关闭之前不会fsync.所以在这一点上,数据可能在RAM中,在kernel/fs缓存中的某个地方.

注意:元数据还不是一个问题:我确保数据已经到达磁盘盘片之后,最终的元数据将被写入并保存.数据本身就是问题所在.

所以问题是,我如何帮助数据到达实际的磁盘盘片?

我之后想过运行这个单独的程序:

int fd = open(path);
fsync(fd);
close(fd);
Run Code Online (Sandbox Code Playgroud)

这有助于刷新数据,还是应该使用不同的方法?

linux fsync sata ext4

5
推荐指数
1
解决办法
246
查看次数

修改vim突出显示优先级

我有四种类型的突出显示.vimrc(每种都显示不同的颜色):

  • incsearch(突出显示为搜索匹配)
  • 匹配(当前单词,视觉工作室编辑)
  • 2匹配(行尾的尾随空格)
  • hlsearch(常规/搜索匹配)

突出显示的优先级似乎与我上面列出的完全相同.例如,增量搜索着色将覆盖任何其他匹配颜色(如果存在于同一字符中).

我想hlsearch优先考虑第二,以便它覆盖两者match2match颜色(如果存在于同一个字符中).

有没有办法实现这一目标?

作为参考,这些是我.vimrc文件中的相关行:

[...]
set hlsearch
set incsearch
[...]
function Matches()
    highlight curword ctermbg=darkgrey cterm=bold gui=bold guibg=darkgrey
    silent! exe printf('match curword /\V\<%s\>/', escape(expand('<cword>'), '/\'))
    highlight eolspace ctermbg=red guibg=red
    2match eolspace /\s\+$/
endfunction
au CursorMoved * exe 'call Matches()'
[...]
Run Code Online (Sandbox Code Playgroud)

vim

4
推荐指数
1
解决办法
617
查看次数

标签 统计

c ×1

compiler-errors ×1

compiler-warnings ×1

ext4 ×1

fsync ×1

gcc ×1

git ×1

linux ×1

sata ×1

vim ×1