程序员的自我修养
chenzhOS
科学的尽头是哲学
展开
-
C语言条件判断&&、|| 中的条件执行
我们先来看一个简单的C语言程序:#include <stdio.h>#include <stdbool.h>bool test_1 (bool flag){ printf("%s\n", __func__); return flag;}bool test_2 (bool flag){ printf("%s\n", __func__); return flag;}int main (int argc, char *argv[]){ print原创 2020-12-05 11:05:05 · 2204 阅读 · 0 评论 -
使用iperf进行组播性能测试
虽然平时我们使用的交换机可以直接处理ethernet报文,但是对于电力猫或者其他传输介质的网络设备,测试网络性能最简单的方法就是使用iperf了。 关于ipef的的大部分用法网上几乎都能找到。现在就来讲讲比较偏门的测试组播性能的方法。在PC1 设置发流: iperf -c 224.0.67.67 -u --ttl 5 -t 3600 -b10M在PC2收流:iperf -s -u -B 224.0.67.67 -i 1...原创 2020-08-28 17:50:22 · 5924 阅读 · 7 评论 -
C语言可变参数传递
#include <stdio.h>#include <stdarg.h>//name前面的#号将name表示的值字符串化//##的作用是如果format后面没有参数,可避免逗号存在的错误导致语法错误#define DEBUG(name, id, format, ...) print_log(#name, id, format, ##__VA_ARGS__)void print_log(char *name, int id, char *format, ...){.原创 2020-07-25 14:41:39 · 1141 阅读 · 0 评论 -
C/C++中的符号与extern C的作用
很多人都知道,在C++中调用C的api, 需要在C++中使用extern "C"来修饰。那么,为什么呢???我们需要先来了解几个概念:符号: 在链接中,我们将函数和变量统称为符号(Symbol), 函数名或变量名就是符号名(Symbol Name)。每个目标文件(使用gcc -c参数编译出来的.o文件)都会有一个相应的符号表(Symbol Table)。这个表里面记录了目标文件中所用到的所有符号。每个定义的符号都有一个对应的值,叫做符号值(Symbol Value),对于变量和函数来说,符号值就原创 2020-05-15 02:33:19 · 402 阅读 · 0 评论 -
setjmp 与 longjmp 的使用
今天在浏览公司代码的时候发现了一个很有意思的函数...setjump百度了一下,这个setjump函数已经使面向过程编程变得扑朔迷离了~先看代码吧:#include <stdlib.h>#include <setjmp.h>#include <stdio.h>jmp_buf b;void test(){ longjmp(b, 1);}int main(){ if (setjmp(b)) printf("...原创 2020-05-10 23:00:26 · 417 阅读 · 0 评论 -
Linux C中动态链接库的全局变量问题
如果一个共享对象libtest.so中定义了一个全局变量G,而进程A和进程B都使用了libtest.so, 那么当进程A改变这个全局变量G的值时,进程B中的G会受到影响吗?古人云:实践出真知.../** =====================================================================================**...原创 2020-05-05 11:43:51 · 4058 阅读 · 0 评论 -
GCC 编译文件生成可执行文件的过程分析
学硬件的同学第一件事肯定是GPIO点亮LED灯,而学软件的同学,大部分做的第一件事就是Hello world!#include <stdio.h>int main(int argc, char *argv[]){ printf("Hello World!\n"); return 0;}相信上述代码很多同学闭着眼睛都能敲出来,然后使用下面的命令编译...原创 2020-04-20 01:08:51 · 3152 阅读 · 0 评论