小编use*_*645的帖子

C单元测试功能

在C或C++中如果我有一个具有以下结构的程序:

..includes..
..defines..

void function_one(int i) {
    ...
}

void function_two(const char * str) {
    ...
}

int main(int argc, char *argv[]) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

保存为main.c/cpp.

如何编写一个新文件test.c/cpp,我可以在其中调用函数main.c/cpp

我现在怎么样:

编译器标志:-etest_main
要编译的文件:main.c test.c
运行测试输出:Blank no errors

我的测试主打印"在这里",但我不知道为什么测试可执行文件不是.

c unit-testing

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

任何信号的C++轮询错误

信号SIGTERM和SIGINT的信号处理程序在接收到任何一个信号时会导致轮询错误.我不确定为什么会这样做,我想我不知道我错过了一些sigaction的行为.

while(!signalHandler.gotExitSignal()) {
    switch (poll(&ufds[0], NUM_FDS, POLL_TIMEOUT)) {
        case -1: {
            throw std::runtime_error("poll error (-1)"); /* ABORT */
        }
        .
        .
Run Code Online (Sandbox Code Playgroud)

我的signalHandler是一个包含sigaction处理的类.

struct sigaction killAction, termAction;

memset(&killAction, 0, sizeof(struct sigaction));
killAction.sa_handler = SignalHandler::ExitHandler;
sigemptyset(&killAction.sa_mask);
killAction.sa_flags = 0;
if(sigaction(SIGTERM, &killAction, NULL) < 0)
    throw SignalException("sigaction failed for killAction");

memset(&termAction, 0, sizeof(struct sigaction));
termAction.sa_handler = SignalHandler::ExitHandler;
sigemptyset(&termAction.sa_mask);
termAction.sa_flags = 0;
if(sigaction(SIGTERM, &termAction, NULL) < 0)
    throw SignalException("sigaction failed for termAction");
Run Code Online (Sandbox Code Playgroud)

所以我给出的片段循环的预期行为应该是:

  1. while(!signalHandler.gotExitSignal()){
  2. switch(poll(&ufds [0],NUM_FDS,POLL_TIMEOUT)){
  3. 轮询后做一些清理工作
  4. 转到1
  5. while(!signalHandler.gotExitSignal()){
  6. 打断
  7. switch(poll(&ufds [0],NUM_FDS,POLL_TIMEOUT)){
  8. 轮询后做一些清理工作
  9. 转到1 …

c++ signals polling

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

标签 统计

c ×1

c++ ×1

polling ×1

signals ×1

unit-testing ×1