小编Nav*_*K N的帖子

查看编译器扩展代码 - C++

我了解到编译器会在编译时扩展宏.模板也在编译时扩展.有没有办法看到这个扩展的代码?我正在使用Visual Studio 2008进行编译.

有什么想法吗?

c++ compiler-construction macros templates

11
推荐指数
3
解决办法
4918
查看次数

在跨平台应用程序中使用snprintf

我正在编写一个C程序,预计将与所有主要编译器一起编译.目前我在Linux机器上开发GCC,并在提交代码之前在MSVC上编译.为了使交叉编译变得容易,我正在编译-ansi-pedantic标记.这很有效,直到我开始使用snprintfC89标准中没有的.GCC可以在没有-ansi开关的情况下编译它,但MSVC将始终失败,因为它没有C99支持.

所以我做了类似的事情,

#ifdef WIN32 
#define snprintf sprintf_s
#endif
Run Code Online (Sandbox Code Playgroud)

这很有效,因为snprintf并且sprintf_s具有相同的签名.我想知道这是正确的方法吗?

c portability cross-platform compilation

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

Visual Basic 6.0中的十进制数据类型

我需要用非常大的数字进行计算(除法或乘法).目前我正在使用Double并获得价值.我可以使用Decimal类型在C#上准确地进行相同的计算.我正在寻找一种在VB6.0中进行精确计算的方法,我在VB6.0中找不到Decimal类型.

用于进行具有较大值的算术计算而不会出现浮点舍入问题的数据类型是什么?

vb6 math double decimal

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

异步方法和异步委托

简而言之,C#3.0异步方法异步委托看起来很相似,但行为却截然不同.

这是本书所说的两者.

异步方法

  1. 很少或从不阻止任何线程.
  2. Begin方法可能不会立即返回给调用者.
  3. 一个没有C#语言支持的商定协议.

异步代理

  1. 可以阻止任何时间长度
  2. BeginInvoke立即返回给调用者.
  3. 内置编译器支持.

该书还说,异步方法的目的是允许许多任务在少数线程上运行; 异步委托的目的是与调用者并行执行任务.

当我通过反射器查看System.IO.Stream类中的BeginRead()方法时,它正在使用委托并在其上调用BeginInvoke.因此异步方法在内部使用异步委托.

  1. 在这种情况下,怎么能说他们的行为不同?既然它在内部使用委托,那么如何进行上述比较呢?
  2. 您是否认为使用委托的BeginXXX方法是与调用者并行执行函数的方法?
  3. 通过保持充分利用CPU等所有优点来实现异步方法的正确方法是什么?

有什么想法吗?

.net c# multithreading asynchronous

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

共享库中的错误处理策略 - C.

我正在使用C 编写跨平台共享库(.so在linux和.dllwindows中).目前,当出现错误时,库函数会返回正确的错误代码并将错误信息写入stderr.库函数还会发送一些信息和调试消息stdout.这适用于基于控制台的客户端.

现在这个库将拥有使用C++和wxWidgets编程的GUI的客户端程序.我想知道处理错误并通知错误的最佳做法是什么?一个UI应用程序访问数据来stdoutstderr在所有平台上?

我想的另一种方法是库初始化函数初始化一个具有函数指针的结构.库上的所有函数都将采用此结构的实例并调用函数指针.这样客户端可以选择打印消息的位置.

我想知道解决这个问题的明显方法是什么?任何帮助都会很棒.

c c++ error-handling shared-libraries

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

使用boost shared_ptr

我必须使用智能指针,我发现来自boost的"shared_ptr"看起来不错.我下载了boost库,我可以看到很多文件和库.有没有办法只使用shared_ptr?

c++ boost

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

提升源代码

有没有办法获得boost库源代码?我浏览了SVN存储库,只能看到HPP文件.那里没有可用的源文件.我想查看"shared_ptr"的源代码.谁能指导我?

从哪里可以下载BCP实用程序?

c++ boost

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

使用std :: map时这些适当的做法是什么?

我有一些使用问题std::map:

  1. enumstd::map一个良好的实践中使用一个关键?请考虑以下代码:

    enum Shape{
        Circle,
        Rectangle
    };
    
    int main(int argc, char* argv[])
    {
         std::map<Shape,std::string> strMap;
         // strMap.insert(Shape::Circle,"Circle"); // This will not compile
         strMap[Shape::Circle] = "Circle";         // But this will work
         return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在上面的示例中,为什么insert()在重载[]运算符正常工作时调用生成编译器错误?建议将哪些方法插入到std::map

  3. 我知道当在类find()上使用该方法时std::map,它不是在容器中进行顺序搜索,而是进行一些对数搜索,这将比顺序搜索快得多.这种理解是否正确?

c++ enums map standard-library

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

包装malloc - C.

我是C的初学者.在阅读git的源代码时,我发现了这个包装函数malloc.

void *xmalloc(size_t size)
{
    void *ret = malloc(size);
    if (!ret && !size)
        ret = malloc(1);
    if (!ret) {
        release_pack_memory(size, -1);
        ret = malloc(size);
        if (!ret && !size)
            ret = malloc(1);
        if (!ret)
            die("Out of memory, malloc failed");
    }
#ifdef XMALLOC_POISON
    memset(ret, 0xA5, size);
#endif
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

问题

  1. 我不明白他们为什么要用malloc(1)
  2. 做什么release_pack_memory和我在整个源代码中找不到这个函数实现.
  3. 这有什么#ifdef XMALLOC_POISON memset(ret, 0xA5, size);作用?

我打算在我的项目中重用这个功能.这是一个很好的包装malloc

任何帮助都会很棒.

c malloc memory-management

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

当"while" - C中使用常量时,为什么MSVC会生成警告C4127

对于代码,

while(1)
{
   /* ..... */
}
Run Code Online (Sandbox Code Playgroud)

MSVC生成以下警告.

warning C4127: conditional expression is constant
Run Code Online (Sandbox Code Playgroud)

警告的MSDN页面建议使用for(;;)而不是while(1).我想知道它有什么优势for(;;)以及为什么它会在不断使用中发出警告while

我应该在GCC上使用什么标志来获得相同的警告?

c compiler-warnings visual-c++ c4127

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