我正在审查一些代码,我看到有人做了
if (0 == strcmp(foo,""))
Run Code Online (Sandbox Code Playgroud)
我很好奇,因为我认为这样做会更快
if (foo[0] == '\0')
Run Code Online (Sandbox Code Playgroud)
这是正确的还是strcmp足够优化,使它们相同.
(我意识到,即使存在一些差异,它也会很小,但我想通过使用我的方法保存至少一些指令.)
是否存在关于如何在__FILE__宏中扩展宏的规范.h?
如果我定义 foo.h
#define MYFILE __FILE__
Run Code Online (Sandbox Code Playgroud)
并将其包括在内 foo.c
#include "foo.h"
int main(){
printf("%s",MYFILE);
....
}
Run Code Online (Sandbox Code Playgroud)
这是输出foo.h还是foo.c?(是的,我意识到这是一个愚蠢的例子)
对不起应该是一个简单的问题.网络上的文档似乎存在冲突.对于它的价值VS2008回归,foo.c因为我期望....我想.我只是想确认这是否是定义的行为.
以下代码中的逻辑运算符和位运算符之间是否存在任何功能差异?使用这一个或另一个的原因是什么?
typedef unsigned char BOOLEAN;
void orOperatorsComparison(BOOLEAN bBar, BOOLEAN bFoo)
{
BOOLEAN bLogicalOr = (bFoo || bBar);
BOOLEAN bBitwiseOr = (bFoo | bBar);
...
}
Run Code Online (Sandbox Code Playgroud) 由于某种原因,我正在寻找的代码有很多类似的东西
char tmp[4];
memcpy(&tmp[0],foo_pointer,bar_size)
char tmp[4];
memcpy(tmp,foo_pointer,bar_size)
char tmp[4];
memcpy(&tmp[0],foo_pointer,bar_size)
我本来希望的
char tmp[4];
memcpy(tmp,foo_pointer,bar_size)
char tmp[4];
memcpy(&tmp[0],foo_pointer,bar_size)
char tmp[4];
memcpy(tmp,foo_pointer,bar_size)
有没有什么理由让我在第一时间写作呢?
我猜C只是一个重新解释,并且位模式保持原样.
我试图理解当我将更宽的有符号值转换为更窄的有符号值时会发生什么.是保留符号,还是简单地将较窄宽度中的值解释为带符号值.
谢谢你的帮助.
编辑 - 这是针对C99编译的c代码.问题不在于c ++编译器将使用粗糙的旧样式转换,而是如果有什么定义C的作用.
我无法想象一个架构会在多个指令中设计对其最小数据类型的访问,但也许流水线有一些我不考虑的问题?