我了解到编译器会在编译时扩展宏.模板也在编译时扩展.有没有办法看到这个扩展的代码?我正在使用Visual Studio 2008进行编译.
有什么想法吗?
我正在编写一个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具有相同的签名.我想知道这是正确的方法吗?
我需要用非常大的数字进行计算(除法或乘法).目前我正在使用Double并获得价值.我可以使用Decimal类型在C#上准确地进行相同的计算.我正在寻找一种在VB6.0中进行精确计算的方法,我在VB6.0中找不到Decimal类型.
用于进行具有较大值的算术计算而不会出现浮点舍入问题的数据类型是什么?
简而言之,C#3.0说异步方法和异步委托看起来很相似,但行为却截然不同.
这是本书所说的两者.
该书还说,异步方法的目的是允许许多任务在少数线程上运行; 异步委托的目的是与调用者并行执行任务.
当我通过反射器查看System.IO.Stream类中的BeginRead()方法时,它正在使用委托并在其上调用BeginInvoke.因此异步方法在内部使用异步委托.
有什么想法吗?
我正在使用C 编写跨平台共享库(.so在linux和.dllwindows中).目前,当出现错误时,库函数会返回正确的错误代码并将错误信息写入stderr.库函数还会发送一些信息和调试消息stdout.这适用于基于控制台的客户端.
现在这个库将拥有使用C++和wxWidgets编程的GUI的客户端程序.我想知道处理错误并通知错误的最佳做法是什么?一个UI应用程序访问数据来stdout并stderr在所有平台上?
我想的另一种方法是库初始化函数初始化一个具有函数指针的结构.库上的所有函数都将采用此结构的实例并调用函数指针.这样客户端可以选择打印消息的位置.
我想知道解决这个问题的明显方法是什么?任何帮助都会很棒.
我必须使用智能指针,我发现来自boost的"shared_ptr"看起来不错.我下载了boost库,我可以看到很多文件和库.有没有办法只使用shared_ptr?
我有一些使用问题std::map:
enum在std::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)在上面的示例中,为什么insert()在重载[]运算符正常工作时调用生成编译器错误?建议将哪些方法插入到std::map?
我知道当在类find()上使用该方法时std::map,它不是在容器中进行顺序搜索,而是进行一些对数搜索,这将比顺序搜索快得多.这种理解是否正确?
我是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)
问题
malloc(1)?release_pack_memory和我在整个源代码中找不到这个函数实现.#ifdef XMALLOC_POISON memset(ret, 0xA5, size);作用?我打算在我的项目中重用这个功能.这是一个很好的包装malloc?
任何帮助都会很棒.
对于代码,
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++ ×5
c ×4
boost ×2
.net ×1
asynchronous ×1
c# ×1
c4127 ×1
compilation ×1
decimal ×1
double ×1
enums ×1
macros ×1
malloc ×1
map ×1
math ×1
portability ×1
templates ×1
vb6 ×1
visual-c++ ×1