小编Gio*_*Gio的帖子

编辑.cpp文件时,在switch语句后删除多余的缩进

在我的〜/ .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)

有什么办法可以改变这种行为?(注意:我的文件 …

vim

2
推荐指数
1
解决办法
230
查看次数

如何在运行时将存储在文件中的char数组读入char缓冲区

我在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数组的最佳方法是什么?

c

2
推荐指数
1
解决办法
813
查看次数

Vim跳到最后出现的替换参数

当我执行替换命令时,例如

:%s/toBeReplaced/Replacement/g
Run Code Online (Sandbox Code Playgroud)

Vim跳到最后一次出现toBeReplaced.这非常令人恼火,因为我必须回到我正在编辑的位置.我已经快速地将我的.vimrc重命名为.vimrc_,以便禁用我的个人.vimrc.同样的事情发生了,因此它似乎是vim的默认行为.

当执行替换命令时,我希望vim坚持在我当时正在编辑的位置.有没有办法实现这个?

vim

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

如何通过打开/关闭数据库用例(上下文管理)避免代码重复?

刚开始使用 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)

go

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

`for(...)`语句中的计算

很多时候我看到的代码如下:

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++

0
推荐指数
1
解决办法
103
查看次数

声明虚拟析构函数但没有实现时会发生什么?

在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错误.

c++ inheritance virtual-destructor

-2
推荐指数
1
解决办法
510
查看次数

标签 统计

c++ ×2

vim ×2

c ×1

go ×1

inheritance ×1

virtual-destructor ×1