小编CsT*_*mas的帖子

当函数具有特定大小的数组参数时,为什么它被指针替换?

鉴于以下计划,

#include <iostream>

using namespace std;

void foo( char a[100] )
{
    cout << "foo() " << sizeof( a ) << endl;
}

int main()
{
    char bar[100] = { 0 };
    cout << "main() " << sizeof( bar ) << endl;
    foo( bar );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

main() 100
foo() 4
Run Code Online (Sandbox Code Playgroud)
  1. 为什么数组作为指向第一个元素的指针传递?
  2. 它是C的遗产吗?
  3. 标准说什么?
  4. 为什么C++的严格类型安全性下降了?

c++ arrays standards sizeof function-parameter

65
推荐指数
2
解决办法
3万
查看次数

函数静态变量是否在GCC中是线程安全的?

在示例代码中

void foo()
{
  static Bar b;
  ...
}
Run Code Online (Sandbox Code Playgroud)

使用GCC编译是否可以保证b以线程安全的方式创建和初始化?

在gcc的手册页中,找到了-fno-threadsafe-statics命令行选项:

不要发出额外的代码来使用C++ ABI中指定的例程来进行本地静态的线程安全初始化.您可以使用此选项在不需要线程安全的代码中略微减小代码大小.

  1. 这是否意味着,默认情况下,GCC的本地静态是线程安全的?所以没有理由明确保护,例如pthread_mutex_lock/unlock

  2. 如何编写可移植代码 - 如何检查编译器是否会添加其防护?或者关闭GCC的这个功能是否更好?

c++ static gcc initialization thread-safety

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

Sizeof字符串文字

以下代码

#include <iostream>    
using namespace std;

int main()
{
    const char* const foo = "f";
    const char bar[] = "b";
    cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
    cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
    cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出

sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
Run Code Online (Sandbox Code Playgroud)

在32位操作系统上,使用GCC编译.

  1. 为什么要sizeof计算字符串文字的长度(所需空间)?
  2. 当给出时,字符串文字是否具有不同的类型(来自char*或char [])sizeof

c++ string sizeof

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

如何等待退出非子进程

对于子进程,可以使用wait()waitpid()函数暂停当前进程的执行,直到子进程退出.但是此功能不能用于非子进程.

还有其他功能,可以等待退出任何进程吗?

c linux process wait

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

从重载模板函数中选择的规则是什么?

鉴于下面的代码,为什么foo(T*)选择该功能?

如果我删除它(foo(T*)代码)代码仍然编译并正常工作,但G ++ v4.4.0(以及可能还有其他编译器)将生成两个foo()函数:一个用于char [4],另一个用于char [7].

#include <iostream>
using namespace std;

template< typename T >
void foo( const T& )
{
    cout << "foo(const T&)" << endl;
}

template< typename T >
void foo( T* )
{
    cout << "foo(T*)" << endl;
}

int main()
{
    foo( "bar" );
    foo( "foobar" );
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ templates

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

是否有适用于C++的工作语义差异工具?

我发现只有废弃的项目,理论和功能列表.但我找不到可以比较两个C++源文件并显示语义差异的工具.

当然,我不会比较两个不相关的文件,或者在10年的开发和维护期间积累的变化.但是,通常在代码审查中讨论的更改将更容易理解,如果与正确的含义一起呈现,而不是在字符/字/行级别进行文本更改

c++ diff semantics

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

比较浮点0

如果foo是float类型,则以下表达式是有效/推荐的吗?

(0.0f == foo * float(0))
Run Code Online (Sandbox Code Playgroud)

无论foo的值如何,它都具有预期的(数学)值吗?

C++标准是定义行为还是特定于实现?

c++ floating-point equality

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

msgsnd()线程和/或进程安全吗?

如果两个pthreads在"相同"时间调用msgsnd()函数,将消息发布到同一个消息队列会发生什么?

如果两个进程相同怎么办?它们是线程还是进程是否重要?

特别感兴趣的Linux 2.6.15-2.5#1 SMP PREEMPT Tue Sep 19 10:56:25 CDT 2006 x86_64 x86_64 x86_64 GNU/Linux

linux multithreading message-queue

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

向正在运行的进程授予能力

已经运行的进程需要特权指令,例如使用 SO_RCVBUFFORCE 套接字选项。该进程作为普通用户进程运行。

如何赋予这个过程能力/权限?基于文件的功能设置仍然是一个梦想吗?

我已经尝试了/usr/sbin/setpcapslibcap 包和cap_set_proc()api 中的实用程序,但该CAP_SETPCAP功能在系统上被阻止(基于 Fedora 4 和 2.6.20 内核的遗留系统),因此它无法为不同的自我授予/删除功能过程。

考虑过为该进程设置临时 root uid,但是有没有办法更改外部已运行进程的有效 UID?setuid()// ...函数seteuid()只能修改当前进程(谁在调用该函数)。

linux permissions privileged-functions linux-capabilities

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

Minidump创建空转储文件

我们有MiniDumpWriteDump()一个进程内崩溃处理程序,它使用DbgHelp编写一个minidump是一个进程崩溃的情况.我知道这不是最好的方法,但目前我们没有其他选择.

问题是:某个可执行文件总是创建0字节转储.但它适用于其他过程.这种行为背后可能的原因是什么?

windows minidump

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

计算作为文本写入的数字长度的最简单/最优雅的方法是什么?

给定最大可能值,如何简单地表示以十进制形式将此数字写为文本所需的空间?

真正的任务:pid_t使用Linux上的gcc 记录固定长度的进程ids().在std::setw()iomanipulator中使用编译时表达式会很好.

我发现linux/threads.h头包含一个PID_MAX值,该值具有分配给进程的最大pid.所以有

#define LENGTH(t) sizeof(#t)-1
Run Code Online (Sandbox Code Playgroud)

LENGTH(PID_MAX)将是一个编译时表达式,但不幸的是这个数字是以hexa定义的:

#define PID_MAX 0x8000
Run Code Online (Sandbox Code Playgroud)

我目前最好的解决方案有点奇怪

static_cast<int>( ::floor( ::log(PID_MAX)/::log(10) + 1 ) );
Run Code Online (Sandbox Code Playgroud)

但这是计算运行时并使用math.h中的函数

c++ fixed-length-record

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