在我的〜/ .vimrc中,我具有以下缩进设置:
" If available, load indenting file for specific file type.
filetype indent on
" Does nothing more than copy the indnetation from the previous line,
" when starting a new line. autoindent does not interfere with other
" indentation settings
set autoindent
" Spaces are better than tab character
set smarttab expandtab
set shiftwidth=4
set tabstop = 4
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这可以正常工作。但是有一件事让我很烦。
当我在.cpp文件中有一个switch / case语句时,案例会自动缩进,例如
switch (x) {
case A:
// ...
Run Code Online (Sandbox Code Playgroud)
虽然我真正想要的是:
swith (x) {
case A:
// ...
Run Code Online (Sandbox Code Playgroud)
有什么办法可以改变这种行为?(注意:我的文件 …
我在C中工作,我正在修改现有代码.
我有一个char数组存储在一个文件中,如下所示:
"\x01\x02\x03"
"\x04\x05\x06"
"\x07\x08\x09"
Run Code Online (Sandbox Code Playgroud)
在原始源代码中,此char数组包含如下:
const static char chs[] =
#include "file.h"
;
Run Code Online (Sandbox Code Playgroud)
我正在修改此代码以在运行时将文件加载到char数组中(以获得与上述方法完全相同的结果),而不是预处理器包含它.我的第一种方法是简单地将文件读入char缓冲区,如下所示:
FILE *fp;
const char *filename = "file.h";
fp = fopen (filename, "rb");
assert(fp != NULL);
fseek(fp, 0L, SEEK_END);
long int size = ftell(fp);
rewind(fp);
// read entire file into the buffer
char *buffer = (char*)malloc(sizeof(char) * size);
size_t nrOfBytesRead = fread(buffer, 1, size, fp);
Run Code Online (Sandbox Code Playgroud)
但是我很快发现这不正确.该文件已包含char数组的确切代码表示,我不能简单地将其读入char缓冲区并获得与include方法相同的结果.
在运行时期间将存储在文件中的char数组放入char数组的最佳方法是什么?
当我执行替换命令时,例如
:%s/toBeReplaced/Replacement/g
Run Code Online (Sandbox Code Playgroud)
Vim跳到最后一次出现toBeReplaced.这非常令人恼火,因为我必须回到我正在编辑的位置.我已经快速地将我的.vimrc重命名为.vimrc_,以便禁用我的个人.vimrc.同样的事情发生了,因此它似乎是vim的默认行为.
当执行替换命令时,我希望vim坚持在我当时正在编辑的位置.有没有办法实现这个?
刚开始使用 Go,我想知道以下情况:
我有一个非常简单的代码库,我只想打开/关闭数据库连接并执行一个简单的查询。我可以按如下方式执行此操作(此处仅显示重要部分):
import (
"database/sql"
_ "github.com/lib/pq"
)
func (db *Database) ExecQueryA() {
dbConn, err := sql.Open("postgres", db.psqlconn)
if err != nil {
panic(err)
}
defer dbConn.Close()
_, err = db.Exec(...
if err != nil {
panic(err)
}
}
Run Code Online (Sandbox Code Playgroud)
上面的想法很好,但是如果我想再写 x 个这样的函数,我不想重复这部分:
import (
"database/sql"
_ "github.com/lib/pq"
)
func (db *Database) ExecQueryA() {
dbConn, err := sql.Open("postgres", db.psqlconn)
if err != nil {
panic(err)
}
defer dbConn.Close()
_, err = db.Exec(...
if err != nil {
panic(err)
}
} …Run Code Online (Sandbox Code Playgroud) 很多时候我看到的代码如下:
int s = a / x;
for (int i = 0; i < s; i++)
// do something
Run Code Online (Sandbox Code Playgroud)
如果在for循环中,既没有a也没有x被修改,那么我可以简单地写:
for (int i = 0; i < a / x; i++)
// do something
Run Code Online (Sandbox Code Playgroud)
然后假设编译器优化a/x,即用常量替换它?
在C++中,我们可以在头文件中完美地声明一个函数,而无需实际实现它.这编译很好,通常这不会提供任何问题,但是...我想知道它是否可以在未实现虚拟析构函数时导致问题.
当没有实现虚拟析构函数时,在这种情况下我们通过基类的指针删除派生类的实例,派生类的析构函数是否仍然会被调用?
例如
class Base{
public:
virtual ~Base() {}
};
class Derived: public Base {
public:
~Derived(); // HAS NO IMPLEMENTATION
};
Base *b = new Derived();
delete b;
Run Code Online (Sandbox Code Playgroud)
注意:如评论中所述,上述示例未正确链接.这里提供的是解释我试图获得更多洞察力的情况,但是在链接过程中的实践中,这个例子将导致undefined reference to Derived错误.