小编Rom*_*098的帖子

添加两个字符会产生int

我做了一个简单的程序,用GCC 4.4/4.5编译如下:

int main ()
{
  char u = 10;
  char x = 'x';
  char i = u + x;

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

g ++ -c -Wconversion a.cpp

我有以下内容:

a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value
Run Code Online (Sandbox Code Playgroud)

我为以下代码得到了同样的警告:

  unsigned short u = 10;
  unsigned short x = 0;
  unsigned short i = u + x;

a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘short unsigned int’ from ‘int’ may alter its …
Run Code Online (Sandbox Code Playgroud)

c++ integer integer-overflow integer-promotion

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

如何比较Linux中前N个字节的二进制文件

我有两个不同大小的二进制文件.我需要在Linux中比较这些文件的前N个字节.我希望结果是"是"(相同)或"否"(不相同),而不是字节到字节的比较.N可以从KB到GB之间变化.

目前我正在使用以下方法:

head -c N input1.dat | rdiff signature >1.sig
head -c N input2.dat | rdiff signature >2.sig
diff 1.sig 2.sig
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有另一种方法,更简单.谢谢.

linux diff binaryfiles

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

clang -cc1和系统包括

我有以下文件foo.cpp:

#include <vector>

struct MyClass
{
  std::vector<int> v;
};
Run Code Online (Sandbox Code Playgroud)

它可以用clang成功编译(我在Ubuntu 13.04 32bit上使用clang 3.3):

clang++ -c foo.cpp
Run Code Online (Sandbox Code Playgroud)

现在我要打印AST:

clang++ -cc1 -ast-print foo.cpp
Run Code Online (Sandbox Code Playgroud)

我有以下错误

foo.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
         ^
struct MyClass {
};
1 error generated.
Run Code Online (Sandbox Code Playgroud)

看起来好像clang++ -cc1不知道系统包含文件等.我想知道如何设置包括clang++ -cc1

c++ clang abstract-syntax-tree include-path

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

无异常处理STL错误

我有一个使用STL的项目很多.现在我正在努力将项目移植到不支持异常的特定平台.我可以禁用异常,但是我仍然需要处理STL错误.

是否有任何方法可以在禁用异常的情况下正确处理STL错误?是否有任何第三方STL实施有助于它?

c++ stl exception

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

保护UDP - OpenSSL或GnuTls还是......?

我需要保护我的UDP流量.据我所知,DTLS协议是最好的方法.还有一个 - IPsec - 但它看起来不适合我,因为它不容易使用,并且可能存在硬件问题.

我发现有些库已经实现了DTLS.所以现在我想选择 - OpenSSL还是GnuTls?你能告诉我什么更好用吗?有什么缺点或优点?或者可能有另一个实施DTLS支持的库?

谢谢.

linux security openssl udp

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

在 gmock 的 EXPECT_CALL 中调用 sleep()

在调用 FuncHelper 之前,我正在尝试在 .WillOnce 中进行一些睡眠。所以我需要类似于以下内容:

EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(sleep(TimeToSleep)), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));
Run Code Online (Sandbox Code Playgroud)

是否可以在 .DoAll 中使用 arg 调用 sleep()?C++98 是首选。

更新:

该解决方案基于@Smeeheey 答案并使用 C++98。

template <int N> void Sleep ()
{
  sleep(N);
}
...
EXPECT_CALL(*_mock, Func(_,_,_)).Times(1)
  .WillOnce(DoAll(InvokeWithoutArgs(Sleep<TimeToSleep>), 
                  Invoke(_mock, &M_MyMock::FuncHelper)));
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing googletest googlemock

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

使用 -fno-inline 对 memcmp 进行错误的 GCC 9(及更高版本)优化

有一个小func函数可以将内存块与静态常量归零数组进行比较。这是一个原始示例来说明问题:

#include <cstring>
#include <memory>

#define MAX_BYTES (256)

inline int my_memcmp(const void * mem1, const void * mem2, const size_t size)
{
    const auto *first  = reinterpret_cast<const uint8_t *>(mem1);
    const auto *second = reinterpret_cast<const uint8_t *>(mem2);
    if (size < 8)
    {
        for (int i = 0; i < size; ++i) {
            if (*first != *second) return (*first > *second) ? 1 : -1;
            ++first; ++second;
        }
        return 0;
    }

    return std::memcmp(mem1, mem2, size);
}

bool func(const uint8_t* in, …
Run Code Online (Sandbox Code Playgroud)

c++ gcc compiler-optimization

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

我什么时候应该在位图上调用DeleteObject()

我正在研究一些传统的Win32/MFC项目.

我发现了以下(伪代码):

HDC hDC = ::CreateCompatibleDC(hDCWnd);
HANDLE hFileMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, dwSize, FileMapName);
HBITMAP hBmp = ::CreateDIBSection(hDCWnd, &zBI, DIB_RGB_COLORS, &pvNull, hFileMap, 0);

::SelectObject(hDC, hBmp);
::DeleteObject(hBmp);
::CloseHandle(hFileMap);

// .. do something with hDC ..

::DeleteDC(hDC);
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪.任何人都可以解释一下,在我对DC做某事之前删除位图和/或关闭文件句柄是否正确?

谢谢.

windows winapi gdi

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

使用进程之间共享正确Pthread互斥

关于stackoverflow,是否可以在进程之间共享pthread互斥锁有很多问题,但是我没有发现有关共享互斥锁初始化的问题/答案。

据我了解,使用进程共享互斥锁的常用方法如下:分配共享内存块,在共享内存块上初始化pthread互斥锁,然后使用它。

在创建共享内存的情况下,如果多个进程尝试分配具有相同密钥ID的共享内存块,则由OS处理。好的,但是我不明白的是如何安全地在共享内存块上初始化互斥锁?

我对吗,pthread_mutex_init不提供任何安全的方法来从不同进程中同时初始化pthread_mutex_t?如果是,我如何为进程提供独占访问权限以初始化共享的“互斥”?以及如何确定另一个进程是否成功初始化了互斥锁?

第二个问题涉及阻止互斥锁的进程崩溃的情况。好了,有一个健壮的互斥锁可以处理这种情况并返回相应的错误代码。共享内存块呢?似乎一个进程应该注意是否是最后一个使用共享内存破坏它的进程。

linux multithreading mutex pthreads

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

如何检测 OneDrive 仅联机文件

从 Windows 10 Fall Creators Update(版本 16299.15)和 OneDrive build 17.3.7064.1005 开始,用户可以使用按需文件(https://support.office.com/en-us/article/learn-about-onedrive-files -on-demand-0e6860d3-d9f3-4971-b321-7092438fb38e )

现在,任何 OneDrive 文件都可以具有以下类型之一:仅在线、本地可用和始终可用。

使用 WinAPI 我如何知道该文件(例如“C:\Users\Username\OneDrive\Getting started with OneDrive.pdf”)是仅在线文件?

winapi onedrive

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