小编sim*_*mon的帖子

如何在运行时在CTest中传递命令行参数

我正在使用CTest并希望在运行时将命令行参数传递给基础测试.我知道有很多方法可以将命令行参数硬编码到CMake/CTest脚本中,但我想在运行时指定命令行参数,并将这些参数通过CTest传递给基础测试.

这甚至可能吗?

command-line cmake ctest

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

何时使用Cygwin或MinGW编译C代码?

我想知道在什么情况下使用Cygwin编译C代码以及何时会选择MinGW.我找到了Cygwin和MinGW有什么区别?描述Cygwin和MinGW之间的差异.

据我了解,可以说以下内容:

  • Cygwin:允许编译符合POSIX标准的操作系统的C源代码在Windows上运行(需要cygwin1.dll).例如,我可以使用适用于Windows的pthreads API编译应用程序,尽管Windows本身并未实现API.
  • MinGW:允许编译符合Windows的C源代码.因此,使用上面的示例,我在MinGW中使用gcc进行编译时无法使用pthreads API,但是需要使用Windows提供的线程API.我也可以使用不同的编译器,例如VC++附带的编译器,而不是使用MinGW gcc编译器.

但是,我的理解似乎是错误的,因为我能够使用MinGW编译包含pthread.h的虚拟程序.我错误地理解了什么?

c windows cygwin mingw

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

来自fread()的意外返回值

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int main()
{
    FILE* bmp = NULL;
    uint32_t offset;
    uint8_t* temp = NULL;
    size_t read;
    unsigned int x_dim = 600, y_dim = 388;

    bmp = fopen("test_colour.bmp", "r");

    if (!bmp)
        return -1;

    /* Get the image data offset */
    fseek(bmp, 10, SEEK_SET);
    fgets((char*)&offset, 4, bmp);

    printf("Offset = %u\n", offset);

    temp = malloc(3*x_dim*y_dim*sizeof(uint8_t));

    if (!temp)
        return -1;

    /* Go the the position where the image data is stored */
    fseek(bmp, offset, SEEK_SET);

    /* Copy image data …
Run Code Online (Sandbox Code Playgroud)

c bmp fread

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

使用std :: array :: size实例化std :: array时出错

示例代码test.cpp

#include <array>
#include <string>

int main ()
{
  // OK
  const std::array<int, 2> array_int = {42, 1337};

  std::array<float, array_int.size()> array_float_ok;

  // Error
  const std::array<std::string, 2> array_string = {"foo", "bar"};

  std::array<float, array_string.size()> array_float_error;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

用g ++ 4.8.4编译(Ubuntu 14.04)

g++ -Wall -std=c++0x test.cpp -o test
Run Code Online (Sandbox Code Playgroud)

给出以下错误消息

test.cpp: In function ‘int main()’:
test.cpp:14:39: error: call to non-constexpr function ‘constexpr std::array<_Tp, _Nm>::size_type std::array<_Tp, _Nm>::size() const [with _Tp = std::basic_string<char>; long unsigned int _Nm = 2ul; std::array<_Tp, _Nm>::size_type = long unsigned int]’ …
Run Code Online (Sandbox Code Playgroud)

c++ arrays std constexpr c++11

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

意外的左移行为

可能重复:
GCC左移溢出

考虑以下最小程序.

#include <stdint.h>
#include <stdio.h>

int main()
{
    uint32_t v = 1024;
    v &= (((uint32_t)1 << 32) - 1);
    printf("v = %u\n", v);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这打印1024正如我预期的那样,在MinGW下用GCC进行编译.因为向左移动32次的1再次为0,因此0-1 = -1,即"1111 ...... 1111".带有任何值的AND'应该再次返回相同的值.

但是,如果我将程序更改为

#include <stdint.h>
#include <stdio.h>

int main()
{
    unsigned int s = 32;
    uint32_t v = 1024;
    v &= (((uint32_t)1 << s) - 1);
    printf("v = %u\n", v);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印结果现在0.有人可以解释这种行为吗?

c bit-shift

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

Ctest-使用--test-command选项进行构建和测试

我使用Ctest来运行一堆使用add_test注册的Google测试。当前,这些测试没有任何参数。但是,我想在运行ctest时为它们提供所有参数(所有参数都通用,特别是--gtest_output = xml)。

我听说使用--test-command选项可以做到这一点,但是,我看到我们需要将--test-command和--build-and-test一起使用。有这种用法的例子吗?

unit-testing cmake googletest ctest

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

在VHDL函数中生成随机值

我有一个设计,我正在写入/读取RAM并从读取值执行一些计算.在某些情况下,我从RAM位置读取值,我还没有写任何东西.这是故意的,因为在发生这种情况的情况下,未初始化的值不会影响计算:在这些情况下,未初始化的值乘以0.

但是,乘以包含位的unsigned/ signed类型会'U'导致"不关心"输出(即乘法输出的所有位都是'X'),即使另一个操作数为0.因此,我无法检查我的最终计算输出testbench因为它变得"不关心"(似乎"不关心"输出被解释为0).

为了避免这个问题,我编写了一个函数来解析to中的任何'U''X'位.功能如下std_logic_vector'0'

function f(x : std_logic_vector) return std_logic_vector is
  variable y : std_logic_vector (x'range);
begin
  y := x;
  -- pragma synthesis off
  for i in 0 to x'length-1 loop
    case x(i) is
      when 'U' | 'X' => y(i) := '0';
      when others    => y(i) := x(i);
    end case;
  end loop;  -- i
  -- pragma synthesis on
  return y;
end;
Run Code Online (Sandbox Code Playgroud)

现在我想通过设置'X''U'位来扩展功能,'0' …

vhdl uniform

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

解除引用由pthread_join设置的指针时的Segfault

我有以下代码用于测试如何使用pthread_exit()和"实现返回值" pthread_join().

#include <stdio.h>
#include <pthread.h>

void* busy() {

    int returnValue = 2;
    pthread_exit((void*)&returnValue);

}


int main() {

    void* retVoidPtr = NULL;
    int* retValPtr = NULL;
    int retVal;

    pthread_t busyThread;
    pthread_create(&busyThread, NULL, busy, NULL);
    pthread_join(busyThread, &retVoidPtr);
    retValPtr = (int*) retVoidPtr;
    retVal = *retValPtr;

    printf("Busy thread returned %d\n", retVal);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

该程序编译良好,但从未得到printf声明.该行发生了一个段错误retVal = *retValPtr.使用gdb,我可以看到retValPtr指针不再,NULL但是当我尝试print *retValPtrgdb时说"无法访问地址0x处的内存......".我出错的任何建议?

c pthreads segmentation-fault

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