C语言常用宏总结

获取数组长度

/// Obtain the number of elements in the given C array

#define GET_ARRAY_LEN( arrayName ) (sizeof( arrayName ) / sizeof(( arrayName)[ 0 ] ))

使用例子:

#include <stdio.h>

/// Obtain the number of elements in the given C array

#define GET_ARRAY_LEN( arrayName ) (sizeof( arrayName ) / ......

void *的作用

在stackoverflow上看到一篇关于void *作用觉得非常不错,将作者的回答贴在下面,后续补充自己的理解。

A pointer to void is a "generic" pointer type. A void * can be converted to any other pointer type without an explicit cast. You cannot dereference a void * or do pointer arithmetic with it; you must convert it to a pointer to a......

C语言宏assert

assert宏

/* assert example */

#include <stdio.h> /* printf */

#include <assert.h> /* assert */

void print_number(int* myInt) {

assert (myInt!=NULL);

printf ("%d\n",*myInt);

}

int main ()

{

int a=10;

int * b = NULL;

int * c = NULL;

b=&a;

print_number (b);

print_number (......

C C++const与数组

在常讨论问题的qq group中看到大家对一个问题争论不一,本着学习的态度,编写demo,复习和学习相关知识,如有错误欢迎指正。

const例子一:#include <stdio.h>

int main()

{

/*这里加*表示数组parr内容不能修改即使用下面注释的语句赋值是非法的*/

char * const parr[] = {"abc","def"};

char *ptr = "Helloworld";

//parr[1] = ptr;

printf("parr[0] = %s\n",......

cJSON使用入门

本文例子及相关解释来自文章cJSON的使用方法,修复原文中的几个明显错误和内存泄露,因在项目中需要使用到cJSON,因此本文主要学习cJSON的相关使用,源码阅读与解析在后续文章中更新。

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScrip......

C语言宏offsetof

C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。

在阅读Linux/UNIX系统编程手册一书时阅读源代码时有如下相关注释:

/* REQ_MSG_SIZE computes size of 'mtext' part of 'requestMsg' structure.

We use offsetof() to handle the possibility that there ar......

Where is PATH_MAX defined in linux

stackoverflow上看到一篇帖子Where is PATH_MAX defined in linux,根据自己的理解总结如下:

源代码path_max.c

#include <stdio.h>

#include <linux/limits.h>

int main()

{

printf("%d\n",PATH_MAX);

return 0;

}

使用gcc -E path_max.c -o path_max.i,查案path_max.i,如果源代码中包含头文件limits.h而不是linux/limits.h同样可以得到正确输出......

符合&继承关系下的构造和析构

继承关系下构造析构顺序#include<iostream>

using namespace std;

class Base

{

public:

Base(){

cout << "Base ctor ..." << endl;

}

virtual ~Base(){

cout << "Base dtor ..." << endl;

}

};

class Derived:public Base

{

public:

Derived(){

cout << "Derived cto......

析构函数前加virtual作用

最近在利用地铁通勤时间学习c++相关知识,在csdn看到一篇关于为什么析构函数前加virtual的文章,csdn原文:析构函数前加Virtual作用

大家知道,析构函数是为了在对象不被使用之后释放它的资源,虚函数是为了实现多态。那么把析构函数声明为vitual有什么作用呢?请看下面的代码:

#include<iostream>

using namespace std;

class Base

{

public:

Base() {}; //Base的构造函数

~Base() //Base的析构函数

{

cout << "Output from the de......

strdup函数使用误区

在项目中看到有同事使用strdup函数后没有释放内存,在google搜索后发现许多网站中给的代码例子中使用完之后并未释放内存,存在一定程度上的误导。

geeksforgeeks

// C program to demonstrate strdup()

#include<stdio.h>

#include<string.h>

int main()

{

char source[] = "GeeksForGeeks";

// A copy of source is created dynamically

// and pointer......