
C
文章平均质量分 79
YapingXin
航天/航空/军工装备行业,航电系统、遥测/测发控系统、系统故障诊断、预测与健康管理(PHM)高级系统架构师。
展开
-
C Tips: 举例说明在 Visual C++ 中忽略 C4996 编译警告的几种方法
通过一个简单的小例子介绍几种忽略 C4996 编译警告的方法。原创 2024-06-20 09:33:39 · 1175 阅读 · 0 评论 -
在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector
本文介绍了在 Visual C++ 2022 中使用内存泄漏检测工具 VLD 的方法。原创 2024-06-20 07:06:15 · 2103 阅读 · 0 评论 -
C Tips: 分享一段验证 UTF-8 字符串有效性的代码
函数实现 modp_utf8.c。头文件:modp_utf8.h。原创 2024-06-16 22:53:39 · 411 阅读 · 0 评论 -
解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题
自从 Visual Studio 2017 Version 15.7 以来,Visual C++ 中增加了一个编译选项:/Zc:__cplusplus,这个编译选项默认是关闭的,只有打开了这个编译选项,__cplusplus 这个宏才能被正确地更新为 C++ Language Standard 对应的值。原创 2024-06-15 09:39:59 · 1136 阅读 · 0 评论 -
在Linux平台编译iLog3动态链接库时遇到的问题:`tls_g' can not be used when making a shared object
在Linux平台编译iLog3动态链接库时遇到的问题:`tls_g' can not be used when making a shared object环境问题检索解决问题功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可...原创 2020-05-08 10:53:28 · 1185 阅读 · 0 评论 -
C Tips: Convert LPCTSTR to UTF-8 string
目的本文实现了这个函数:size_t ConvertTstrToUTF8 (LPCTSTR lpFileName, char* pstr_utf8, const size_t MaxLength);代码size_t ConvertTstrToUTF8 (LPCTSTR lpFileName, char* pstr_utf8, const size_t M原创 2015-05-25 00:14:51 · 1724 阅读 · 0 评论 -
C Tips: Convert GBK to Unicode (base on MultiByteToWideChar ())
目的本文基于 MultiByteToWideChar 实现了以下函数:BOOL GBKtoUnicode (WCHAR *pOut, char * pGBK);代码BOOL GBKtoUnicode (WCHAR *pOut, char * pGBK){ int retCode = MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED原创 2015-05-25 00:18:50 · 1083 阅读 · 0 评论 -
Visual C++ Tips: warning C4996: 'stricmp' was declared deprecated
问题C4996这个编译警告以前遇到过,见:《Visual C++ Tips: warning C4996: ‘MBCS_Support_Deprecated_In_MFC’: MBCS support in MFC is deprecated》今天这个C4996警告不能用那个老的办法去解决: warning C4996: ‘stricmp’ was declared deprecatedOut原创 2015-07-02 20:19:02 · 3155 阅读 · 0 评论 -
Visual C++ Tips: fatal error LNK1276: invalid directive 'ComMode.Obj' found; does not start with '/'
问题将某古老的VC6项目迁移到VS2005,编译时出现这个错误: fatal error LNK1276: invalid directive ‘ComMode.Obj’ found; does not start with ‘/’解决经过广泛搜寻,发现是这样一条语句导致的这个编译错误:#pragma comment(linker, "ComMode.Obj")解决方案:把这行代码注释掉(Re原创 2015-07-02 19:45:16 · 2735 阅读 · 0 评论 -
C Tips: Convert GBK to Unicode
目的本文实现了这个函数:int gbk_mbtowc (WCHAR *p_unicode, const unsigned char *p_source, const int length);gbk.h/*-----------------------------------------------------------------------------Projec原创 2015-05-25 00:10:06 · 34013 阅读 · 1 评论 -
Pthreads on Microsoft Windows
Posix Threads API (pthreads) 是在并行编程中用到的非常普通的API,这套API包括许多非常基础的同步方法,方便我们编写高效的多线程程序。然而,Microsoft Windows 并不包含这样的接口。幸运的是,这里有一个开源的Windows平台上的 Pthread 实现。Pthreads Implementation on Microsoft Windows开原创 2013-06-19 18:40:24 · 3623 阅读 · 0 评论 -
Visual Studio Tips: error LNK2005: ... already defined in LIBCMTD.lib(new.obj)
遇到的问题一个很老的C++工程,之前编译一切正常,就在我引入了几个新的 .h 和 .cpp 文件之后,编译死活通不过了,报以下错误:Error 2 error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)原创 2015-05-13 03:07:09 · 4112 阅读 · 0 评论 -
Visual Studio Tips: error LNK1117: syntax error in option 'VERSION:1.20b'
遇到的问题在用Visual Studio 2012编译一个老C 程序时,出现一下编译错误: error LNK1117: syntax error in option ‘VERSION:1.20b’查MSDN,最终解决办法是:在项目属性的Linker属性中,Version设置有误: 把这项设置改为1.20,就解决了这个编译错误了。原创 2015-02-07 12:46:10 · 5003 阅读 · 0 评论 -
Windows SDK Tips: stdafx.h: 关于_WIN32_WINNT
遇到的问题最近在调试一个老程序,发现这个程序居然无法在Visual Studio 2012中调试运行,每次调试运行的时候就闪退了。根据编译中的提示查资料,最后解决的办法如下: 在stdafx.h中,原先的 _WIN32_WINNT 定义的值是 0x0400,改为0x0403就好了。官方解释MSDN有一篇文章解释了 _WIN32_WINNT 以及 WINVER 的用法:Using the Windo原创 2015-02-07 11:58:36 · 1222 阅读 · 2 评论 -
C Tips:获得当前运行目录(Windows版)
接口:BOOL GetCurrentModuleFolderPath(_Out_ LPTSTR * lpFolderPath, _Out_ DWORD * pLength);实现:#include const TCHAR FolderDelimiter = _T('\\');const TCHAR StringDelimiter = _T('\0');BOOL GetCurr原创 2015-02-02 15:47:43 · 916 阅读 · 0 评论 -
C++ Tips: 在控制台中显示中文
首先,要保证你的控制台的当前code page是中文: 代码示例:// CppAnalyzerConsole.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>#include <locale>using namespace std;int _tm原创 2015-08-24 12:15:02 · 4318 阅读 · 0 评论 -
Windows API: 调用FindFirstFile之后发生的内存泄漏(未解决)
看这段正常得不能再正常的C语言源代码:bool check_file_exists(LPCTSTR lpFileName){ WIN32_FIND_DATA findFileData = { 0 }; HANDLE hFind = NULL; ULONGLONG fileSize = 0; hFind = FindFirstFile(lpFileName, &find原创 2015-08-31 18:22:14 · 2302 阅读 · 0 评论 -
Visual Studio 2015 memory leak detection
Visual Studio 2015调试C++代码的时候有一个很爽的工具,就是Diagnostic Tools,用它可以查看代码的CPU执行时间、进程的内存占用。所以我们可以用Diagnostic Tools来分析内存泄漏。看下面两幅截图:这个工具我还没有用熟,我相信用熟练以后,一定能极大地辅助C++代码分析!附上一篇文章:N原创 2015-08-31 18:11:35 · 3147 阅读 · 0 评论 -
用欧拉筛搜寻素数
用欧拉筛搜寻素数的 C 语言的例子。原创 2017-10-22 00:42:14 · 923 阅读 · 0 评论 -
VC++ Tips: 如何从 DLL 导出 *.DEF
已有 .DLL 文件和 .h 文件,如何得到 .LIB 文件呢?本文介绍了详细的步骤。原创 2016-10-20 06:28:33 · 2161 阅读 · 1 评论 -
Resolve VC++ 2015 D8016 Error
把一个 VC++ 6.0 project 升级到 VC++ 2015 之后,编译的时候出现以下错误: D8016 : ‘/ZI’ and ‘/Gy-’ command-line options are incompatible原创 2016-08-28 22:10:10 · 1577 阅读 · 1 评论 -
MSVC 6.0 的 inline, _inline, __inline
然后发现,如果把 inline 改成 _inline,就编译通过了。那么 \_\_inline 行不行呢?试一下,也行。_\_\_inline 本是 gcc 的一个私家扩展,但是 MSVC 6.0 也支持了。总之唯独就是 inline 不支持。经查,inline 是 C99 开始才引入到 C 语言当中的关键字。而 MSVC 6.0 是 1998 年的产物,所以当然不支持 inline 了。原创 2016-07-22 13:11:08 · 2191 阅读 · 0 评论 -
用 WinPcap 获取网络接口列表
在 WinPcap SDK 中,有一个函数:pcap\_findalldevs_ex,这个函数可以获得网络接口列表。本文给出了相应的示范程序。原创 2015-10-31 22:39:37 · 3003 阅读 · 0 评论 -
Visual C++ Tips: 创建 SQLite 静态库
编译 SQLite 静态库。本文所使用编译工具软件:Visual Studio 2015 Community;SQLite 版本:3.9.2。原创 2015-11-14 23:15:02 · 2092 阅读 · 0 评论 -
C++ Tips: 获取更精确的系统时间(Windows 系统)
如果要获得真正毫秒级甚至更高精度的当前系统时间,必须跟 CPU 打交道,别无它法。原创 2015-10-28 12:21:36 · 14314 阅读 · 1 评论 -
C Tips: std::string / std::wstring 的 Trim 函数
std::string 和 std::wstring 的 Trim 函数。原创 2015-09-23 13:49:05 · 2403 阅读 · 0 评论 -
在 Visual C++ 中使用 WinPcap / Win10Pcap
本文介绍了如何在 Visual C++ 项目中使用 WinPcap 或者 Win10Pcap。原创 2015-10-20 18:09:06 · 13217 阅读 · 3 评论 -
Visual C++ Tips: 在调试的时候设置命令行参数
如果我们想要在调试 VC++ 程序的时候带上命令行参数,可以这样做:在项目属性里面的 Configuration Properties | Debugging | Command Arguments 中,输入命令行参数即可。原创 2015-11-03 17:38:06 · 4394 阅读 · 0 评论 -
Socket tips: UDP Echo service - Client code
#include #include #include #include #include #include #include #define BUFFER_LENGTH 1024void ExitWithMessage(const int errorCode, const char * errorMessage){ fprintf(stderr, "\n\nError原创 2014-06-22 01:50:54 · 5449 阅读 · 0 评论 -
Socket tips: UDP Echo service - Server code
#include #include #include #include #include #include #include #define BUFFER_LENGTH 1024void ReverseMessage(char buffer[], ssize_t receivedBytesCount);void ExitWithMessage(const int error原创 2014-06-22 01:49:37 · 5448 阅读 · 0 评论 -
C Tips:显示点阵汉字的小例子
很简陋的一段小程序,演示如何显示点阵字库。有时间的时候再xie原创 2014-06-25 10:34:05 · 4884 阅读 · 0 评论 -
Visual C++ 2010 Express Tips: 用 C 和 C++ 创建动态链接库
先简单说一下这篇小文的目的。其实纯粹是因为上一篇文章《将C语言源代码编译成动态链接库》里面介绍了用命令行工具(cl、link或gcc)创建动态链接库,但程序员在实际工作中用得最多的还是IDE,所以有必要说说在IDE里面怎么做这件事。创建动态链接库,那就直接用C++好了,Visual C++多么强大。但是我喜欢C语言胜过喜欢C++,所以打算看看如何用纯C来创建动态链接库。工具依然选择Visu原创 2012-02-23 19:19:50 · 9952 阅读 · 1 评论 -
泛泛地说说托管代码的运行效率问题
谁都知道C比C++快,C++比C#快。问题是快多少。而具体快多少也不应该泛泛而谈,应该是什么类型的操作中快百分之多少,以及细分为冷启动、热启动、运行中、多次运行均值、峰值、资源受限的一些特殊情况,分这些情况下分别向此地测试、分析、说明。Microsoft 提供的资料宣称 .NET 大约是 C/C++ 执行效率的 90%。XNA 则提供资料宣称 Managed DirectX原创 2012-04-24 05:30:48 · 2016 阅读 · 3 评论 -
C Tips: How to tell if system is little endian or big endian?
关于不同的字节存储顺序 Little endian 和 Big endian,如果有不清楚的地方请查阅维基百科:http://en.wikipedia.org/wiki/EndiannessC code如下:#include #include #include union TestEndian_Unit{ uint16_t value; uint8_t bytes[2];原创 2012-04-11 19:24:05 · 1825 阅读 · 0 评论 -
解决MinGW运行时的libgmp-10.dll丢失错误(libgmp-10.dll is missing from your computer)
安装完MinGW之后,执行gcc.exe,出现以下错误:The program can't start because libgmp-10.dll is missing from your computer. Try reinstalling the program to fix this problem.实际上libgmp-10.dll就在MinGW安装后的bin文件夹中,并原创 2012-02-22 19:44:48 · 27349 阅读 · 7 评论 -
将C语言源代码编译成动态链接库
下面我们举一个例子,用C语言写一个简单的函数,并在控制台(命令行)中将它编译为DLL。一、源代码我们创建一个C语言源程序:Test.c关键:__declspec(dllexport) 申明将这个方法导出到DLL中。源代码:#include "stdio.h"__declspec(dllexport) int sum(int a, int b){ re原创 2012-02-22 21:14:03 · 37736 阅读 · 6 评论 -
Visual Studio 2010中VC++ Directories的设置
以往,在Visual Studio 2008中,VC++ Directories的设置位于这里:Tools | Options | Projects and Solutions | VC++ Directories在Visual Studio 2010中,VC++ Directories的位置变了。如下:View | Other Window | Property Manage原创 2011-09-06 05:11:42 · 10515 阅读 · 1 评论 -
在Visual Studio 2010中使用Visual Leak Detector
Visual Leak Detector是过去(Visual Studio 2008的时代)我们常用的C/C++内存泄露检查工具。在Visual Studio 2010中依然可以使用该工具,但有两点需注意:版本问题设置变化版本问题:在codeproject.com上面提供的最新版本依然是1.9d,但是请注意,该版本在Visual Studio 2010下面表现非常差。网上有很多人注原创 2011-09-06 08:11:20 · 21615 阅读 · 15 评论 -
Visual C++ 2010 Express Tips: 编写C语言程序
说几句题外话:在Windows平台上的免费C/C++ IDE中,Visual C++ 2010 Express是一个值得推荐的工具。当然 Code::Blocks 也是值得推荐的。Bloodshed Dev-C++ 原本也很值得推荐,但鉴于它多年未更新了,最新的Release版本还停留在多年前的4.0,5.0版至今还是beta,所以在我心中它暂时就不值得推荐了。好,现在我们回到正题。默原创 2011-09-29 13:54:33 · 11918 阅读 · 6 评论 -
C语言练习03:操作SQLite数据库
SQLite数据库是常用的轻量化本地文件型数据库,非常适用于桌面应用程序与嵌入式应用程序的本地数据存储。在本例中我们通过C语言编程实现对SQLite数据库的一些简单的操作。从SQLite官方站点上下载这些文件:sqlite3.exesqlite3.dllsqlite3.defsqlite3.hsqlite3.c注:sqlite3.h 和 sqlite3.c 包含在 sq原创 2011-10-20 16:43:32 · 2431 阅读 · 0 评论