C语言补充学习

C语言补充学习

    • 1.atoi()
    • 2.memset函数
    • 3.#ifdef相关
    • 4.行结尾的反斜杠
    • 5.`_FILE_、_line_、_func_、#line`
    • 6.memcpy函数的用法
    • 7.const基本用法
    • 8.输出"%02X"
    • 9.#ifdef __cplusplus

1.atoi()

  1. 将任意类型的数字转换为字符串
    itoa():将整型值转换为字符串。
    ltoa():将长整型值转换为字符串。
    ultoa():将无符号长整型值转换为字符串。
    gcvt():将浮点型数转换为字符串,取四舍五入。
    ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
    fcvt():指定位数为转换精度,其余同ecvt()。
  2. 将字符串转换为任意类型
    atof():将字符串转换为双精度浮点型值。
    atoi():将字符串转换为整型值。
    atol():将字符串转换为长整型值。
    strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
    strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
    strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

2.memset函数

初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
对于变量
struct sample_strcut stTest;

一般情况下,清空stTest的方法:
stTest.csName[0]=’/0’;
stTest.iSeq=0;
stTest.iType=0;

用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:
struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);

3.#ifdef相关

#define: 定义一个预处理的宏
#undef :取消宏的定义
#if :编译预处理中的条件命令,相当于C语法中的if语句
#ifdef:判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef : 与#ifdef相反,判断某个宏是否未被定义
#elif : 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if
#else:与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else
#endif : #if, #ifdef, #ifndef这些条件命令的结束标志.
defined :与#if, #elif配合使用,判断某个宏是否被定义
#if 0 …#endif :不会被编译。在代码中留下暂时不用,但可能有价值的代码。
#error :停止编译并显示错误信息

4.行结尾的反斜杠

反斜杠起到换行作用,用于宏定义和字符串换行,宏定义居多。
如果一行代码有很多元素,太长影响阅读,可以通过在结尾加“\”的方式,实现换行,编译时会忽略“\”及其后的换行符,当做一行处理。
在宏定义中,要换行必须使用“\”结尾。
例:

// 按取消键退出
#define RETURN_CANCEL(ucRet)\
{\
	if (EM_key_CANCEL == ucRet)\
	{\
		return ET_IGNORE;\
	}\
}

5._FILE_、_line_、_func_、#line

注:"_FILE_"、"_LINE_"、"_func_"、"#line"均大小写敏感
_FILE_ 用于指示本行代码所在源文件的文件名;
_LINE_用于指示本行代码所在源文件中的位置(行数);
_func_用于指示本行代码所在函数(函数名);
#line用于重新设定下一行代码的行数;

6.memcpy函数的用法

memcpy是memory copy的缩写,内容复制,它的函数原型:

void *memcpy(void *dest, const void *src, size_t n);

它的功能是从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据,将会被覆盖。memcpy函数定义在string.h头文件里。
memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。
(1)dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。
(2)dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。
(3)与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“\0”而结束。
【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。

7.const基本用法

const定义常变量后,该变量没有写权限,只有读权限
规则:(1)const离谁近,谁就不能被修改;
(2)const修饰一个变量时,一定要给这个变量初始化,若不初始化,在后面也不能初始化。

8.输出"%02X"

表示以16进制的格式输出整数类型的数值,输出域宽为2,不足的用字符0代替。
例:

    printf("%02X\n",a);
    printf("%03X\n",a);
    printf("%04X\n",a);

运行后输出结果为:
0F
00F
000F

9.#ifdef __cplusplus

用于将C++代码以标准C形式输出。C++编译器与C的编译器不同,C中调用C++的代码这样定义安全。

#ifdef   __cplusplus
extern "C"{
//... 正常的声明段
}
#endif

你可能感兴趣的:(学习笔记)