小编Pro*_*mer的帖子

C++用宏替换函数

我们的C++代码中有一个现有的函数实现:

void Function(int param)
{
    printf("In Function\n");
}

int main()
{
    Function(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望将其更改为调用另一个函数(通过宏声明的帮助),它将接受其他参数,如 FILELINE(用于调试目的),然后调用实际函数:

#define Function(param) Function_debug(param, __FILE__,  __FUNCTION__,  __LINE__) \
{\
    printf("In Function_debug [%s] [%s] [%d]\n", file, func, line); \
    Function(param);\
}
Run Code Online (Sandbox Code Playgroud)

但是下面的代码:

#include <stdio.h>

#define Function(param) Function_debug(param, __FILE__,  __FUNCTION__,  __LINE__) \
{\
    printf("In Function_debug [%s] [%s] [%d]\n", file, func, line); \
    Function(param);\
}

void Function(int param)
{
    printf("In Function\n");
}

int main()
{
    Function(10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

翻译为:

void Function_debug(int param, "temp.cpp", …
Run Code Online (Sandbox Code Playgroud)

c c++

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

绘制连续信号

我试图按照下面的图像准确打印连续信号:

在此输入图像描述

以下是我的代码:

x=[0 0 0 1 1 1 1 1 1 -1 -1 0 0];
n=[6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 ];
subplot(2,2,2);
axis([min(n)-10,max(n)+10,min(x)-10,max(x)+10]);
plot(n,x); 
grid on;
xlabel('Time');
ylabel('x2(t)');
title('Continous Signal');
Run Code Online (Sandbox Code Playgroud)

但是输出的情节数字并不符合预期:

在此输入图像描述

在MATLAB中我们不能正确显示连续信号吗?如果是,我需要在我的代码中做出哪些更改.

为什么信号值不通过直线连接 - 它会产生曲线(或倾斜的直线)?

matlab plot signal-processing line

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

RC4 加密:是相同长度输入的输出

对于我的一个项目,我需要通过 Internet 云从 Arduino(使用 GSM 调制解调器)向 PHP Web 服务器发送 POST 请求。我需要将用户 ID 卡详细信息传输到网络服务器进行身份验证。

我尝试使用 RC4 安全算法,发现 Ardunio 和 PHP 都支持 - 所以我使用一些虚拟值的加密和解密进行得很好。

不过我有一个顾虑。假设我的秘密消息是 - '秘密'。RC4 加密后,加密字符串包含不可读的字符 - 所以问题是解密我不知道加密字符串的长度。

如果输入纯文本的长度为 6 ( 'Secret' ),则输出加密字符串也将始终为 6?

有了这个假设,我的加密/解密在 Arduino(C/C++ 堆栈)和 Web 服务器(PHP)中运行良好?

security rc4-cipher

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

如何确保initializer_list不为零

我有一个构造函数接受initializer_list作为参数:

A::A(std::initializer_list<uint32_t> arg)
    : vec(arg)
{
}
Run Code Online (Sandbox Code Playgroud)

问题是它允许初始化器列表为零或空值为arg:

A {}
Run Code Online (Sandbox Code Playgroud)

如何强制使用非零的initializer_list?

c++ c++11

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

Boost循环缓冲区push_back在前面插入数据

我有以下代码:

#include "boost/circular_buffer.hpp"

int main()
{
    // Create a circular buffer with a capacity for 3 integers.
    boost::circular_buffer<int> cb(3);

    // Insert threee elements into the buffer.
    cb.push_back(1);


    int a = cb[0];  // a == 1

}
Run Code Online (Sandbox Code Playgroud)

根据文档,push_back API的意思是“在 circle_buffer 的末尾插入一个新元素” -那么cb [0]如何为1?cb [2]不应存储值1吗?

======================================更新=========== ===================

// Insert threee elements into the buffer.
cb.push_front(11);
cb.push_back(2);
cb.push_back(3);

int a = cb[0];  // a == 11
int b = cb[1];  // b == 2
int c = cb[2];  // c == 3 …
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

如何合并包含某些内容的文本并留下空白行

我在Ubuntu上有一个地址txt文件.像下面的东西 -

Name
Address1
Address2
Address3

Name2
Address12
Address22
Address32
Run Code Online (Sandbox Code Playgroud)

如何将内容合并为 -

Name Address1 Address2 Address3
Name2 Address12 Address22 Address32
Run Code Online (Sandbox Code Playgroud)

实际上,地址一个接一个地写入文件 - 如上所述.新地址由新行或空行分隔.现在我想将每个地址行合并为一行 - 所以重复所有地址

bash awk

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

CMAKE 为 C++ 编译器添加 gcov 选项

我需要调试流程,因此使用 cmake / mingw64 C++ 编译器编译其代码。我知道,如果我们对每个源代码文件使用 -fprofile-arcs -ftest-coverage 进行编译 - 我将获得调试流程执行详细信息,从而帮助我理解和修复流程。因此,我在 CMakelists.txt 中添加了以下 CMAKE 选项,但随后出现了错误:

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS    "-fprofile-arcs -fprofile-generate -lgcov --coverage")
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
SET( CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
SET( CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
Run Code Online (Sandbox Code Playgroud)

构建链接期间出错:

[76/150] Linking CXX executable test.exe
FAILED: test.exe
cmd.exe /C "cd . && C:\tools\mingw64\bin\c++.exe -DGSL_THROW_ON_CONTRACT_VIOLATION -Wall -ftrack-macro-expansion=0 -Werror -std=gnu++14 -D _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING -Og -g3   test.cpp.obj testhelp.cpp.obj  -o test.exe -Wl,--out-implib,test.dll.a -Wl,--major-image-version,0,--minor-image-version,0  ext/googletest/build/googlemock/libgmock_main.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
test/case/TestArgs.cpp.obj: In function …
Run Code Online (Sandbox Code Playgroud)

c++ mingw cmake mingw-w64

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

std :: map为什么不在我的代码中添加键值

我正在尝试将键和值数据添加到我的类地图成员变量中 - 但它没有添加相同的 - 我尝试过的map - insert,[]和emplace方法,但它们不是在我的循环代码中添加数据来映射 - 只有我在课程构建期间插入的值是可用的 - 我需要做的是解决问题 - 我期待show方法也会打印7,8,9,9 -

#include <iostream>
#include <map> 
#include <vector>

  class A {
    public:
      A(std::initializer_list <uint32_t> d): data(d) {}
    std::vector <uint32_t> data;
    bool operator < (const A & rhs) const {
      size_t rhsSize = rhs.data.size();
      for (size_t i = 0; i < data.size(); i++) {
        if (i < rhsSize)
          return false;
        return true;
      }
    }
  };

class B {
  public:
    B(const std::map <A, uint32_t> & t): table(t) {}
  void Show() …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

将 Little Endian 转换为 Big Endian - 未获得预期结果

我有一个非常小的代码,我试图将 16 位数字从小端格式转换为大端格式。

number 的值是 0x8000,转换后我希望它是 0x0080 - 但我得到了一些不同的值,如下所述:

#include <iostream>
int main()
{
        int num = 0x8000;
        int swap = (num>>8) | (num<<8);
        std::cout << swap << std::endl;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出 8388736 作为值,十六进制为 0x800080 - 我不确定我做错了什么?

c++ c++11

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

将共享指针传递给函数参数 - 将它分配给局部变量的正确方法是什么

//header file
void SetLogger(const std::shared_ptr<A>& log);

//cpp file
void SetLogger(const std::shared_ptr<A>& log)
{
    std::shared_ptr<A>&  mLog;
    mLog = log;
}
Run Code Online (Sandbox Code Playgroud)

将shared_ptr作为函数参数传递的最佳方法是什么,以便所引用的对象的所有者船不会更改/不引用引用计数增加并且没有主体应该能够删除它接受所有者?

那么如何在函数中创建一个本地shared_ptr来说明上面的限制呢?

Caller:

SetLogger(A.get()); // A is actually a shared pointer

Header:

void SetLogger(const A& log);

CPP File:

void SetLogger(const A& log)
{
    auto mLog = std::make_shared<A>(log);
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c++ ×7

c++11 ×4

awk ×1

bash ×1

boost ×1

c ×1

cmake ×1

line ×1

matlab ×1

mingw ×1

mingw-w64 ×1

plot ×1

rc4-cipher ×1

security ×1

signal-processing ×1