Tag: C#的

为什么GCC不能优化“x &&(x&4242)”到“x&4242”的逻辑按位AND对?

这里有两个function,我声称做同样的事情: bool fast(int x) { return x & 4242; } bool slow(int x) { return x && (x & 4242); } 从逻辑上说,他们做同样的事情,只是为了100%肯定我写了一个testing,通过他们两个跑了所有40亿可能的投入,他们匹配。 但汇编代码是一个不同的故事: fast: andl $4242, %edi setne %al ret slow: xorl %eax, %eax testl %edi, %edi je .L3 andl $4242, %edi setne %al .L3: rep ret 我感到惊讶的是,海合会无法跨越逻辑消除冗余testing。 我用-O2,-O3和-Os尝试了g ++ 4.4.3和4.7.2,所有这些都生成了相同的代码。 该平台是Linux x86_64。 有人可以解释为什么海湾合作委员会不应该足够聪明,在这两种情况下生成相同的代码? 我也想知道其他编译器是否可以做得更好。 […]

c – 将混合大小写string转换为全部小写字母

在C中将混合大小写string转换为小写字母的最好/最干净的方法是什么?

使用{}语句在里面调用return是一个好方法吗?

我只是想知道是否安全/好的方法来调用return using块内。 例如。 using(var scope = new TransactionScope()) { // my core logic return true; // if condition met else return false; scope.Complete(); } 我们知道在最后的大括号dispose()将被closures。 但是,在上述情况下,由于return跳出给定范围(AFAIK)的控制… 我的scope.Complete()被调用? 对于范围的dispose()方法也是如此。

错误:使用删除的function

我一直在编写朋友编写的一些C ++代码,并且在编译gcc4.6时遇到了以前从未见过的错误: error: use of deleted function 'GameFSM_<std::array<C, 2ul> >::hdealt::hdealt()' is implicitly deleted because the default definition would be ill-formed: uninitialized non-static const member 'const h_t FlopPokerGameFSM_<std::array<C, 2ul> >::hdealt::h' 编辑:这来自使用boost MSM: Boost网页的代码的一部分 Edit2:在源代码中的任何地方都没有= delete() 。 一般来说,这个错误是什么意思? 发生这种types的错误时,我应该寻找什么?

哪个unit testing框架?

我想知道哪个unit testing框架是一个很好的熟悉的unit testing框架? 我知道这可能是一个意见的问题,但我想我会问无论如何。 我知道有一天我需要这样做,所以我不妨学会使用它。 我知道那里有很多,但哪一个对C#开发有效? 从这个问题我可以看出,unit testing是必要的,但是我个人并没有使用它。 所以我就问这个问题

获取std :: string的最后一个元素

我想知道是否有缩写或更优雅的方式来获取string的最后一个字符,如: char lastChar = myString.at( myString.length() – 1 ); 像myString.back()似乎不存在。 有没有相同的东西?

在C语言中编译并运行没有main()的程序

我试图编译和运行下面的程序没有main()函数在C 。 我已经使用以下命令编译了我的程序。 gcc -nostartfiles nomain.c 编译器给出警告 /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340 好吧,没问题。 然后,我运行可执行文件(a.out), printf语句都成功打印,然后出现分段错误 。 所以,我的问题是, 成功执行打印语句后为什么分段错误? 我的代码: #include <stdio.h> void nomain() { printf("Hello World…\n"); printf("Successfully run without main…\n"); } 输出: Hello World… Successfully run without main… Segmentation fault (core dumped) 注意: 在这里, -nostartfiles gcc标志防止编译器在链接时使用标准启动文件

在1个字节内存储8个逻辑真/假值?

我正在使用一个只有2KB SRAM的微控制器,并且迫切需要保存一些内存。 试图找出如何使用位域将8 0值放入单个字节中,但无法完成。 struct Bits { int8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1; }; int main(){ Bits b; b.b0 = 0; b.b1 = 1; cout << (int)b.b0; // outputs 0, correct cout << (int)b.b1; // outputs -1, should be outputting 1 } 是什么赋予了?

由于.NET有一个垃圾收集器,为什么我们需要finalizer / destructors / dispose-pattern?

如果我理解正确的话.net运行库将永远在我之后清理。 所以,如果我创build新的对象,并停止在我的代码中引用它们,运行时将清理这些对象并释放它们占用的内存。 既然是这样,那么为什么一些对象需要一个析构函数或者处理方法呢? 当他们不被引用之后,运行时不会清理它们吗?

在一个GNU CmacrosenvSet(name)中,(void)“”的名字是什么意思?

我今天遇到这种语法,不能解决它的含义: // Uses the GNU C statement expression extension #define envSet(name) ({ \ static int initialised; \ static bool set; \ (void) "" name; \ if (!initialised || !g_cacheEnv) { \ const char *value = getenv(name); \ set = value != NULL; \ initialised = true; \ } \ set; \ }) 我无法理解的具体行是: (void) "" […]