在什么情况下,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
整个文件系统中的一个只显示完整的单行代码.
使用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:
bar
)和Y'(baz
),最后一个commit -c 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) 我有一个禁用写入缓存的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)
这有助于刷新数据,还是应该使用不同的方法?
我有四种类型的突出显示.vimrc
(每种都显示不同的颜色):
/
搜索匹配)突出显示的优先级似乎与我上面列出的完全相同.例如,增量搜索着色将覆盖任何其他匹配颜色(如果存在于同一字符中).
我想hlsearch
优先考虑第二,以便它覆盖两者match
和2match
颜色(如果存在于同一个字符中).
有没有办法实现这一目标?
作为参考,这些是我.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)