![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
JDSH0224
这个作者很懒,什么都没留下…
展开
-
C和C++相互调用规则
无法直接调用原因:C 和 C++ 的函数可以相互调用,但需要一些特殊的注意事项,因为它们有不同的编译和链接规则以及一些语法差异。链接规则:C 语言的链接器通常使用 C 标准的函数命名和调用约定,而 C++ 链接器使用 C++ 的函数命名和调用约定。这意味着 C++ 可以支持函数重载和运算符重载,而 C 不能。如果你要在 C++ 中调用 C 函数,需要使用 extern "C" 块将 C 函数声明包裹起来,以告诉 C++ 编译器使用 C 的链接规则。原创 2024-05-15 09:25:43 · 162 阅读 · 0 评论 -
基于宏定义实现可变函数的嵌套调用
【代码】基于宏定义实现可变函数的嵌套调用。原创 2023-05-05 15:27:57 · 200 阅读 · 1 评论 -
undefined reference to
objdump -t ./obj/ActiveBalance.o,显示的语言格式的函数,原创 2023-03-20 20:18:51 · 92 阅读 · 0 评论 -
可变参数宏定义
个人猜测, ##连接符会将逗号与字符串链接,发现字符串为空,因此就删除其中的逗号,因为__VA_ARGS__这个宏里面,本身就是有可能包含任意多个逗号来支持多个参数。fmt 就是前面的第一个参数 ,是一个字符串里面可以包含格式控制符, 这里宏展开后 fmt 会直接展开成printf的第一个参数。1. 首先我们需要知道,可变参数宏是在C99标准中才实现的,以前没定义这个 __VA_ARGS__宏,这个宏就代表可变参数列表,在GCC中 也支持args...这种写法。原创 2023-01-31 11:33:39 · 1006 阅读 · 0 评论 -
宏定义格式化打印函数
#define debug(fmt,args...) printf (fmt ,##args)原创 2022-11-12 10:13:00 · 226 阅读 · 0 评论 -
C++内存排查
C++中new、delete可以重载C中的malloc、free可以通过-Wl,--wrap,malloc实现在应用程序中替换Linux中Glibc的malloc的四种方法 ._zeropool的博客-CSDN博客打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要替换掉系统的mallochttps原创 2021-12-28 14:06:15 · 618 阅读 · 0 评论 -
格式化打印输出
#define LOG_TRACE(fmt, ...) \ printf("[%s-%d] "fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__)原创 2021-07-30 10:51:46 · 297 阅读 · 0 评论 -
宏定义时动态定义结构体
struct packet { char type;};#define TAILQ_HEAD(name, type) \struct name { \ struct type *tqh_first; /* first element */ \ struct type **tqh_last; /* addr of last next element */ \}void test(){ TAILQ_HEAD(, packet) outgoing;.原创 2021-02-25 23:48:34 · 668 阅读 · 0 评论 -
#ifdef #elif defined(xxx) #else #endif
#define START_FRZ_EVT DWORD dwTestMainDI = 0x50060200;#ifdef START_FRZ_500X *pbSend++ = DT_DB_LONG_U; pbSend += DwordToByte(dwTestMainDI, pbSend); *pbSend++ = 0x01; //optional *pbSend++ ...原创 2019-12-12 16:38:13 · 776 阅读 · 0 评论 -
浮点数丢精度分析
一、十进制整数如何转化为二进制数,只要遇到除以后的结果为0了就结束了 举个例子,11表示成二进制数: 11/2=5 余 1 5/2=2 余 1 2/2=1 余 0 1/2=0 余 1 0结束 11二进制表示为(从下往上):1011二、十进制小数如何转化为二进制数,算法是乘以2直到没有了小数为止 举个例子,...原创 2019-10-24 09:37:46 · 308 阅读 · 0 评论 -
如何在键盘上输出摄氏度“°C”
按住Alt键盘,然后在小键盘上输入0176,自己再如数字母C,搞定详见:https://jingyan.baidu.com/article/a17d5285048bf78099c8f254.html原创 2019-09-21 15:39:26 · 3042 阅读 · 0 评论 -
sscanf从字符串中提取有效数据
DWORD TimestampToSec(const char *pTimestamp){ TTime tTime; char tmp; sscanf(pTimestamp, "%04d-%02d-%02dT%02d:%02d:%02d.", &tTime.nYear, &tTime.nMonth, &tTime.nDay, &tTime.nHour, &...原创 2019-08-27 16:48:28 · 1611 阅读 · 0 评论 -
解决va_list 参数...嵌套问题
void Test1(int bNum, va_list va){ int tmp; TRACE("Run here: Test1.\n"); for (int i=0; i<bNum; i++) { tmp = va_arg(va, int); TRACE("i=%d, tmp=%d.\n", i, tmp); }}void Test0(int idx, B...原创 2019-07-31 11:22:39 · 633 阅读 · 0 评论 -
error: unknown type name 'bool'
C90 does not support the boolean data type.C99 does include it with this include:#include <stdbool.h>另外使用c99标准时,必须在makfile里加入-std=c99标准,如:CC = gcc FLAGS = -std=c99 -o SRC = flash_str...原创 2018-10-17 09:00:58 · 2551 阅读 · 0 评论 -
C语言宏展开之后计算值的问题
宏定义展开的区别#define FILE_OAD_NUM_LEN 2#define FILE_PER_OAD_FIX_DAT_LEN 512 //每个OAD的固定长度//如下两种方式定义,展开之后计算的值正确#define FILE_PER_OAD_BASE_OFFSET(OAD_NUM) (FILE_OAD_NUM_LEN + FILE_PER_OAD_FIX_DAT_LEN*OA...原创 2018-11-14 11:34:30 · 997 阅读 · 0 评论 -
C语言中%*s中*是什么作用
取决于在scanf中使用还是在printf中使用。 在scanf中使用,则添加了*的部分会被忽略,不会被参数获取。 例如:int a,b;char b[10];scanf("%d%*s",&a,b);输入为:12 abc那么12将会读取到变量a中,但是后面的abc将在读取之后抛弃,不赋予任何变量(例如这里的字符数组b) 在printf中使用,*表示用后面...原创 2018-11-20 14:09:16 · 9565 阅读 · 0 评论 -
关于*pwTolCnt++和 (*pwTolCnt)++的区别
void testPoint(WORD *pwTolCnt){ int temp; temp = *pwTolCnt++; //地址加1、temp数据内容为1 temp = (*pwTolCnt)++; //地址不变、数据内容加1,即temp=2}void main(){ WORD wTolCnt = 1; testPoint(&wTolCnt);} ...原创 2019-02-14 15:43:57 · 168 阅读 · 0 评论 -
函数形参作为指针返回处理
我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量。为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段、只读数据...原创 2019-03-21 14:32:17 · 1595 阅读 · 0 评论 -
va_list va_start va_arg va_end
vsnprintf函数头文件:#include <stdarg.h>函数原型:int vsnprintf(char *str, size_tsize, const char *format, va_listap);函数说明:将可变参数格式化输出到一个字符数组参数:str输出到的数组,size指定大小,防止越界,format格式化参数,ap可变参数列表函数用法#incl...原创 2019-07-11 10:31:47 · 136 阅读 · 0 评论 -
Linux C++调用线程报错 error: invalid use of non-static member function
问题描述:基于C++创建一个录音的类,抓取mic的pcm数据,并返回。class MicRecordImpl{ void* audioThread(void *param); void startRecord(void);};其中,在实现类有一个线程函数:void* MicRecordImpl::audioThread(void *param){ //d...原创 2019-07-23 16:53:11 · 4401 阅读 · 1 评论 -
C++ 中的 String 类
C++ 标准库提供了string类类型,支持C语言的所有字符操作,另外还增加了其他更多的功能。现在您可能还无法透彻地理解这个实例,因为到目前为止我们还没有讨论类和对象。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。实例:#include <iostream>#include <string> usi...原创 2019-07-21 08:06:31 · 112 阅读 · 0 评论 -
C++ protected详解
在《C++类成员的访问范围》一节中介绍过类的成员可以是私有成员(private)和公有成员(public)。实际上,类的成员还可以用 protected 访问范围说明符修饰,从而成为“保护成员”。 保护成员的可访问范围比私有成员大,比公有成员小。能访问私有成员的地方都能访问保护成员。 保护成员扩大的访问范围表现在:基类的保护成员可以在派生类的成员函数中被访...转载 2019-08-03 14:04:32 · 1384 阅读 · 0 评论 -
C语言二位数组
前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数。在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示。我写程序的错误如下程序所示: 1 #include 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9原创 2016-09-18 23:40:48 · 797 阅读 · 0 评论