我总结了一个便于记忆的方法:可以这么来记:在C语言里,const后面的都不可修改,就比如const int * p,这里*p不可修改,而int * const p,则p不可修改。 这里回过头来看strcpy就知道为什么加上const了,因为我们要把source的内容拷贝到destinatiion中去,所以这里source的内容肯定不能进行修改,否则拷贝的就不是原来的了。
使用未定义的标识符:SPIT_FLAG_TIMEOUT没有定义,但用#define修饰的语句又不标红。 ## 2、Call to undeclared function 'SPI_FLASH_ReadDeviceID'; ISO C99 and later do not support implicit function declarations 函数在使用前未声明,在头文件末尾添加 uint32_t SPI_FLASH_ReadDeviceID(void); ## 3、Arra...
这个实例演示了 token##n 会连接到 token34 中,在这里,我们使用了字符串常量化运算符(#)和标记粘贴运算符(##)。 defined() 运算符 预处理器defined运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。如果指定的标识符已定义,则值为真(非零)。如果指定的标识符未定义,则值为假(...
char*strcpy(char*restrictdest,constchar*restrictsrc); 补充要求:为保证复制的合法性,dest必须指向一个足够容纳src指向的字符串的存储空间,且两个参数指向的存储空间不能重叠,否则行为未定义。 如果需要只复制前面的部分字符,可以使用strncpy函数。其函数原型为 char*strncpy(char*restrictdest,constchar*restrictsrc,si...
#include"stdafx.h"#include<stdio.h>//当将下面这行声明注释掉后//会显示错误:未定义标识符“externVal”externintexternVal;voidprintfExternVal() { printf("%6d\n", externVal); } 这时候我们想在文件1中的main函数里调用文件2的函数,怎么办呢?通常我们看到在大的工程项目中,都是创建一个头文件,将文件...
sizeof()运算符,以字节为单位,计算类型的大小,返回值为size_t类型,转换说明%zd或%u 9、常量与变量 (1)常量:在程序执行期间,值不发生改变的量 *字面量常量*:直接写出来的值,一般为右值,为可修改的左值赋值 *符号常量*:也称明示常量,由#define定义的量 C语言不允许对常量赋值 ...
输出字符串到指定的文件,不添加换行符 (5)char* strcat(char*, char*)/char* strncat(char*,char*,int) 拼接字符串,将第二个字符串附加在第一个字符串的末尾,更新第一个字符串,第二个字符不变 (6)char* strcpy(char*, char*)/char* strncpy(char*, char*, int) ...
预处理器defined运算符是用在常量表达式中的,用来确定一个标识符是否已经使用 #define 定义过。如果指定的标识符已定义,则值为真(非零)。如果指定的标识符未定义,则值为假(零)。下面的实例演示了 defined() 运算符的用法: #include <stdio.h> #if !defined (MESSAGE) ...
C程序被两次划分为记号,首先是预处理器读取程序,它必须对程序进行记号划分以发现标识宏的标识符。通过对每个宏进行求值来替换宏调用,最后,经过宏替换的程序又被汇集成字符流送给编译器。编译器再第二次将这个流划分为记号。 1.1= 不是 ==:C语言则是用=表示赋值而用==表示比较。这是因为赋值的频率要高于比较,因...
宏名或没有外部链接的标识符叫做内部名字(internal name)。ISO C99规定:至少内部名字的前31字符必须是唯一的,外部名字的前6个字符是必须唯一的,大小写可以不区分。所以,你在定义名字时一定要确保不与C预留的标识符冲突。否则行为是未定义的。所以,下面的外部名字看起来不同,但它们对编译器来说是可能是相同的:...