小编Dou*_*der的帖子

如果编译器是未定义的行为,为什么会发出关于返回对本地堆栈变量的引用的警告?

C++标准规定返回对局部变量(在堆栈上)的引用是未定义的行为,那么为什么许多(如果不是全部)当前编译器只会发出警告呢?

struct A{
};

A& foo()
{
    A a;
    return a; //gcc and VS2008 both give this a warning, but not a compiler error
}
Run Code Online (Sandbox Code Playgroud)

如果编译器为此代码提供错误而不是警告,那会不会更好?

允许这个代码只用警告编译有什么好处吗?

请注意,这不是一个const可以延长临时使用寿命的参考资料.

c++ compiler-construction standards

26
推荐指数
3
解决办法
1074
查看次数

在C#程序中使用bash(cygwin)

我需要使用bash shell"内部"C#程序.我想模仿用户在交互模式下键入并运行cygwin命令.

我创建了一个运行bash和重定向stdin,stout和std错误的进程,但我可以; t t t to to work附加是一个示例代码,它启动bash进程并重定向输入/输出.

问题是我没有tty设备.如果我尝试运行tty命令或stty命令我收到错误响应

tty - not a tty 
stty - Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

我认为这是由于 psi.UseShellExecute = false;

我需要运行cygwin并使用stty -echo禁用echo但是要做到这一点我需要一个tty设备.如何用tty设备创建一个cygwin bash shell并重定向stdin,out和error?

1)缺少什么?

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;

namespace shartCygwin
{
    class Program
    {
        private static Queue<string> ResponseQueue = null;
        private static ManualResetEvent ResponseEvent = null;

        static void Main(string[] args)
        {
            ResponseQueue = new Queue<string>();
            ResponseEvent = new ManualResetEvent(false);

            Process bashProcess = new Process();

            bashProcess.StartInfo.FileName = …
Run Code Online (Sandbox Code Playgroud)

c# bash cygwin process

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

从DLL动态导入C++类

从DLL导入C++类的正确方法是什么?我们正在使用Visual C++.

有dllexport/exports.def + LoadLibrary + GetProcAddress三连胜,但它不适用于C++类,只适用于C函数.这是由于C++名称错误吗?我该如何工作?

c++ windows import dll

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

我如何运行valgrind到一个超级用户位的进程?

我按如下方式运行valgrind: -

/ usr/local/bin/valgrind"process_name"

在执行之后它给我跟随错误

==21731==
==21731== Warning: Can't execute setuid/setgid executable: 
==21731== Possible workaround: remove --trace-children=yes, if in effect
==21731==
valgrind: "process name": Permission denied
Run Code Online (Sandbox Code Playgroud)

我的valgrind权限如下: - -r-sr-xr-x/usr/local/bin/valgrind

我的进程权限如下: - -r-sr-xr-x"process_name"

平台:Linux VMLINUX3 2.6.9-78.0.22.ELsmp(RHEL)

Valgrind版本:valgrind-3.5.0

任何有关这方面的帮助将不胜感激

linux memory valgrind setuid

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

为什么这个内核模块在2.6.39上标记为永久性

当我加载这个模块时:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
  printk("<1> Hello world!\n");
  return 0;
}

static void hello_exit(void) {
  printk("<1> Bye, cruel world\n");
}


module_init(hello_init);
module_exit(hello_exit);
Run Code Online (Sandbox Code Playgroud)

(来自http://www.freesoftwaremagazine.com/articles/drivers_linux?page=0,2)

在2.6.39-02063904-generic(来自Ubuntu PPA)[permanent]lsmod,模块被标记为in 并且无法卸载.但它在默认的2.6.38内核上运行良好.(两者都在Ubuntu 11.04 x86上).

2.6.39有什么变化?我需要在代码中更改什么?

当我遇到这个问题时,我试图找出一个更复杂的问题.

编辑:

根据答案的建议,我编辑了要添加的代码__init__exit(hello3.c):

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("Dual BSD/GPL");

static int __init hello_init(void) {
  printk("<1> Hello world!\n");
  return 0;
}

static void __exit hello_exit(void) {
  printk("<1> Bye, cruel world\n"); …
Run Code Online (Sandbox Code Playgroud)

linux kernel module permanent

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

为什么我不能在Exception类中使用auto_ptr

我在Exception类中遇到auto_ptr问题,我最终简化为:

#include <memory>

class MyException
{
    std::auto_ptr<int> m_foo2;
};

int main()
{
    try
    {
        throw MyException();
    }
    catch (const MyException&)
    {

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

这无法编译:

/perforce/unstable/test/Common/Exceptions/TestException4.cpp:在函数'int main()'中:/perforce/unstable/test/Common/Exceptions/TestException4.cpp:12:错误:没有匹配函数来调用' MyException :: MyException(MyException)'/ perforce/unstable/test/Common/Exceptions/TestException4.cpp:4:note:候选者是:MyException :: MyException()/ perforce/unstable/test/Common/Exceptions/TestException4.cpp :4:注意:MyException :: MyException(MyException&)/ perforce/unstable/test/Common/Exceptions/TestException4.cpp:12:error:in thrown expression

如果我删除auto_ptr,错误就会消失.

这是因为正在复制或分配例外吗?有没有auto_ptr在异常中使用s 的方法?

c++ exception auto-ptr

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

用ctrl c完成程序时调用一个函数

我在Linux环境中工作,我有一个C++程序,我想要的是当我用ctrl + c取消程序时我希望程序执行一个函数,关闭一些文件并打印一些sutff,有没有这样做的方法?谢谢.

linux function

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

gettext的替换

我们在产品中使用gettext进行翻译,但是它遇到了很多问题:

  • 除非系统支持,否则无法使用语言.

在Solaris 9 Sparc上,如果我们将环境重置为各种英语语言环境,则如果计算机没有相应的语言环境,则仍不会翻译该消息.转换文件存在,但我们无法访问它.

  • 使用环境来制定语言

这会导致想要将消息转换为不同语言的服务器出现问题.从理论上讲,这可能是一个完全线程安全,可并行化的操作 - 但gettext意味着我们必须全面锁定翻译.

  • 无法设置默认语言

通过这个我不是指代码中的文本.我们在代码中使用MsgID,所以我想要的是能够指定一个后备转换,如果当前环境定义语言不可用.但gettext不允许这样做 - 我必须尝试,然后重新设置环境才能查看不同的翻译.(使用MsgIDs不是我的选择 - 我想遵循gettext标准并使用英语作为ID,但我被推翻了,现在改变它将是很多工作)

  • 返回的编码在UTF-8和当前本地编码之间变化.

我不是指.po文件 - 它们都是UTF-8(烦人的是,msgfmt不处理BOM,但无论如何).我的意思是gettext ngettext等的输出,它们在AIX和HPUX上是UTF-8(无论本地/终端编码),但在Solaris/Linux/FreeBSD上是本地编码,尽管这可能是由于iconv问题引起的?

在任何情况下,不必为不同的平台拥有特殊代码是很好的 - 我将不得不调查我是否可以bind_textdomain_codeset(domain,codepage);帮助解决这个问题.


有谁知道开源翻译库提供更有用的界面?

c++ unix linux internationalization

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

GetSystemInfo(在Windows上)是否总是返回逻辑处理器的数量?

阅读本文,特别是阅读Microsoft文档,它看起来应该返回PHYSICAL处理器的数量,并且您应该使用GetLogicalProcessorInformation来确定您拥有多少LOGICAL处理器.

这是我在SYSTEM_INFO结构上找到的文档:http://msdn.microsoft.com/en-us/library/ms724958 (v = VS.85).aspx这里是关于GetLogicalProcessorInformation的文档:(通过垃圾邮件添加的空格)过滤器) http:// msdn.microsoft.com/ zh-cn/library/ms683194.aspx

尽管如此,在我发现的关于这个主题的大多数讨论中,开发人员都说GetSystemInfo(以及SYSTEM_INFO结构)报告了LOGICAL处理器的数量.

当我再次搜索时,我发现MS确实在此发布了一些信息(以及一个热修复),这里(通过垃圾邮件过滤器添加了空格): http:// support.microsoft.com/ kb/936235

读取它,听起来像在Xp上,预服务包3,GetSystemInfo报告SYSTEM_INFO结构中的LOGICAL处理器的数量.它还告诉我,在Windows Vista和Windows 7上,GetSystemInfo应该报告PHYSICAL处理器的数量(与Windows XP pre-service Pack 3不同).

有谁知道它实际上做了什么?GetSystemInfo是否真的以不同的方式报告物理处理器的数量(在同一台计算机上),具体取决于它运行的操作系统?

c++ windows winapi hyperthreading

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

如何使用git-p4取消更改

最新的git-p4脚本(https://github.com/ermshiperete/git-p4)有一个"搁置"但没有"取消搁置"的命令.如何使用它取消更改?

git perforce git-p4

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