前言
1. C编程中避免控制台程序一闪而过
2. 引用文件路径
3. Error C4996: ‘strcpy’: This function or variable may be unsafe.的处理方法
4. VS2017 找不到Windows SDK版本10.0.18362.0的解决办法
5. C函数设置默认参数
6. 使用pi定义
7. C++库函数查询
在学习工作中,信手记录一些C代码编写的小技巧,以备查阅,也用以共勉。
在非大数据量处理时,控制台方式运行C代码时,常常由于执行速度过快,运行窗口会一闪而过,导致无法看到控制台的输出信息,此时,一般通过在main函数中,return之前,加入”system(“pause”);”即可在程序运行结束后暂停,这样就可以清楚地看到屏幕输出结果啦。
VS环境中,用于路径时,如下:
strcpy(file_name, "G:\NILM\code\BOCD_input\input_data\laptop_data.csv");
会报出:
warning C4129: “N” : 不可识别的字符转义序列
warning C4129: “c” : 不可识别的字符转义序列
warning C4129: “B” : 不可识别的字符转义序列
warning C4129: “i” : 不可识别的字符转义序列
warning C4129: “l” : 不可识别的字符转义序列
将路径中的“\”改为”\\”即可,如下。
strcpy(file_name, "G:\\NILM\\code\\BOCD_input\\input_data\\laptop_data.csv");
项目属性->预处理定义中,加入” _CRT_SECURE_NO_WARNINGS”即可,如下:
明明可以正常运行的版本,当放在另一台机器上编译时,同样是VS2017,却报出“找不到Windows SDK版本10.0.18362.0”的错误,同时还有一堆“E1696 无法打开源文件stdio.h/stdlib.h/…”、”E0020未定义标识符printf”等错误。
解决方法如下:选中当前项目->右键->属性:
确定后,再次编译,上述所有报错全部消失,解决问题。
推测,下拉菜单中的可选项“10.0.17763.0“应该是当前VS2017对应的Windows SDK版本,而”10.0.18362.0“是原来可成功运行机器上对应的版本号。虽然同为VS2017,估计两者版本还是有一定差别,比如说子版本号不同之类的。
C++中允许为函数提供默认参数,又名缺省参数。
在同时有函数声明(原型)和函数定义时,默认参数可以放在函数声明或者定义中,但只能放在二者之一,如果函数声明和定义中均给出缺省参数时,会给出重定义的错误。
参考代码如下:
函数定义:
void data_dump(const char *label,int len_data, double *data, int mode = 1, int idx_start = 0)
{
…
}
函数声明:
void data_dump(const char *label, int len_data, double *data, int mode, int idx_start);
这里,在函数定义中给出了接口参数mode和idx_start的缺省参数值,分别为1和0,而在函数声明中不需要再给出缺省参数值。
在math.h中已经存在pi的定义,宏定义的名字为M_PI,但不能直接使用,需要先预定义_USE_MATH_DEFINES才行,参考如下:
参考网页:Reference - C++ Reference
包含所有库(如math.h、stdio.h等)、各库下的函数、各函数的说明及其使用示例。