写完了之后当然是编译运行此代码。于是在ubuntu下使用gcc编译器编译出a.out文件,编译器没有报任何错误或者警告,接着./a.out开始运行程序。运行结果可以看到程序走的是else分支,报字符串异常。这时候小伙子开始思考问题,奇怪了,test_str这个字符串不是长度绝对大于0,大于-1的,怎么会这样?好吧,那就在if判断...
} 问题代码 写完了之后当然是编译运行此代码。 编译运行 于是在ubuntu下使用gcc编译器编译出a.out文件,编译器没有报任何错误或者警告, 接着./a.out开始运行程序。运行结果可以看到程序走的是else分支,报字符串异常。 这时候小伙子开始思考问题,奇怪了,test_str这个字符串不是长度绝对大于0,大于-1的,怎么会这样?...
inta_dog=3;inta_cat=2;inta_pig=1;printf("dog"": %d idx: %d\n",a_dog,3);printf("cat"": %d idx: %d\n",a_cat,2);printf("pig"": %d idx: %d\n",a_pig,1);dog:3idx:3cat:2idx:2pig:1idx:1 不得不说,宏的代码可读性确实太差了,哈哈哈! 注意!!!我用MSVC编译上述FOR_EACH...
这种奇怪的C代码格式是一种叫做"宏定义"的技术。宏定义是C语言中的一种预处理指令,它可以将一个常量、表达式或一段代码定义为一个宏,以便在程序中多次引用。 宏定义的格式如下: 代码语言:c 复制 #define 宏名 常量或表达式或代码段 例如,下面是一个宏定义的例子: 代码语言:c 复制 #define PI 3.14159 这个...
计算的是字符串str的长度,从字符的首地址开始遍历,以 '\0' 为结束标志,然后将计算的长度返回,计算的...
奇怪的C代码 inti =3;intans = (++i)+(++i)+(++i); ans等于多少?我想大多数同学都会和我一样的认为: ans = 4 + 5 + 6 = 15. 而实际结果呢? - Linux下用gcc编译的结果是16. - Windows下用VC编译,debug模式的结果是16, Release模式的结果是18....
当那些有心的同学找到 winsock.h 的代码时一定会看到里面只是些函数的声明,最多再加点结构体的声明。直接把函数体写在 h 文件里的可能性非常之小(除非是性能需要的 inline 函数)。在我们失望之余一定还会惊奇的发现每个库的 h 文件开关都会有一行奇怪的代码,例如:而这行代码就是 C/C++ 语言里特有的宏定义...
因为我在我当时用vi编写代码,所以没有语法高亮,而我的程序都编译通过了,但是却出现了很奇怪的事。我也不知道,用gdb调式的时候,发现有些语句直接就过了。这个问题让我花了很多时间,最后发现问题原来是没有空格导致的,TNND,下面我用代码高亮的插件来显示上面的代码, ...
编写代码时,严格检查数组索引。 4. 递归栈溢出 递归调用过深会导致栈溢出,程序崩溃。 #include <stdio.h> void recursive(int n) { if (n > 0) { recursive(n - 1); } } int main() { recursive(10000); // 可能导致栈溢出 return 0; } ...
长这么大我还从没分析过长这么奇怪的代码,能成功编译已经让我备感诧异了,然后不出所料,运行结果如下图: 顺着作者的逻辑,添加头文件和返回值,规范main函数,并展开源代码,函数形参不指定类型时默认为int,我们用int x替换_,得到如下结果: 1 2 3 4