簡體   English   中英

VS2017 #error:: snprintf 的宏定義與標准庫函數聲明沖突

[英]VS2017 #error: : Macro definition of snprintf conflicts with Standard Library function declaration

我正在嘗試使用 VS2017 構建在 VS 2010 中開發的應用程序。 當我構建應用程序時,我收到以下錯誤:

錯誤:: snprintf 的宏定義與標准庫函數聲明沖突

我試圖像這里一樣解決這個問題。 但它在我的情況下不起作用。

我正在使用帶有 VS2017 社區 15.8.2 的 Windows 10。

正如您問題中的錯誤所示,您有一個不再與當前版本兼容的snprintf宏定義。

因此,您需要查找以下內容:

#define snprintf _snprintf

您可以刪除它,或者如果您還需要使用 Visual Studio 2010 編譯您的代碼,您可以添加以下條件:

#if _MSC_VER < 1700 
#define snprintf _snprintf
#endif

該錯誤消息應該有助於告訴您哪個文件包含有問題的 #define。 就我而言,這是錯誤的。 CMAKE 添加了一個標題(在我的例子中是my_config.h ),它沒有通過跟蹤錯誤代碼直接顯示出來。 並對#define snprintf _snprintf進行解決方案范圍搜索,結果為零。

我如何找到有問題的#define:

  • 嘗試構建。

  • 獲取錯誤消息: #error:snprintf 的宏定義與標准庫函數聲明沖突(編譯源文件 D:\\PathToFile\\libmysql.c) libmysql.c 沒有這樣的定義,也沒有它包含的任何頭文件。

  • 雙擊錯誤消息。 這將在新選項卡中打開stdio.h ,在生成錯誤的行(在我的情況下為 1914 行)。

     1906 #if defined snprintf 1907 // This definition of snprintf will generate "warning C4005: 'snprintf': macro 1908 // redefinition" with a subsequent line indicating where the previous definition 1909 // of snprintf was. This makes it easier to find where snprintf was defined. 1910 #pragma warning(push, 1) 1911 #pragma warning(1: 4005) // macro redefinition 1912 #define snprintf Do not define snprintf as a macro 1913 #pragma warning(pop) 1914 #error Macro definition of snprintf conflicts with Standard Library function declaration 1915 #endif
  • 將鼠標懸停在單詞snprintf 上,它會檢查定義(在我的例子中是 1906 行)。 智能感知會告訴你|>| #define snprintf _snprintf在工具提示中。

  • 右鍵單擊單詞snprintf (不是工具提示),然后單擊查看定義轉到定義 這會彈出有問題的#define,您現在可以根據需要刪除或修改它。

     493 #define ssize_t SSIZE_T 494 #define strcasecmp _stricmp 495 #define strncasecmp _strnicmp 496 #define snprintf _snprintf // <-- Offending line. 497 #define strtok_r strtok_s 498 #define strtoll _strtoi64 499 #define strtoull _strtoui64
  • 就我而言,違規行是 496,我只是將其刪除。

  • 返回stdio.h並將鼠標懸停在snprintf詞上,它不應再為您提供工具提示,因為它未定義(我的也從紫色變為白色)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM