Bagikan melalui


Compiler Warning (level 1) C4503

'pengidentifikasi' : panjang nama yang didekorasi terlampaui, nama dipotong

Keterangan

Peringatan kompilator ini kedaluwarsa dan tidak dihasilkan di Visual Studio 2017 dan pengkompilasi yang lebih baru.

Nama yang didekorasi lebih panjang dari batas kompilator (4096), dan dipotong. Untuk menghindari peringatan ini dan pemotongan, kurangi jumlah argumen atau panjang nama pengidentifikasi yang digunakan. Nama yang dihiasi yang lebih panjang dari batas kompilator memiliki hash yang diterapkan dan tidak dalam bahaya tabrakan nama.

Saat menggunakan versi Visual Studio yang lebih lama, peringatan ini dapat dikeluarkan saat kode Anda berisi templat khusus pada templat berulang kali. Misalnya, peta peta (dari Pustaka Standar C++). Dalam situasi ini, Anda dapat membuat typedefs Anda sebagai jenis ( struct, misalnya) yang berisi peta.

Namun, Anda mungkin memutuskan untuk tidak merestrukturisasi kode Anda. Dimungkinkan untuk mengirim aplikasi yang menghasilkan C4503, tetapi jika Anda mendapatkan kesalahan waktu tautan pada simbol terpotong, mungkin lebih sulit untuk menentukan jenis simbol dalam kesalahan. Penelusuran kesalahan mungkin juga lebih sulit; debugger mungkin mengalami kesulitan memetakan nama simbol ke nama jenis. Kebenaran program, bagaimanapun, tidak terpengaruh oleh nama yang terpotong.

Contoh

Sampel berikut menghasilkan C4503 dalam kompilator sebelum Visual Studio 2017:

// C4503.cpp
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>

class Field{};

typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;

Sampel ini menunjukkan salah satu cara untuk menulis ulang kode Anda untuk mengatasi C4503:

// C4503b.cpp
// compile with: /W1 /EHsc /c
#include <string>
#include <map>

class Field{};

struct Screen2 {
   std::map<std::string, Field> Element;
};

struct WebApp2 {
   std::map<std::string, Screen2> Element;
};

struct WebAppTest2 {
   std::map<std::string, WebApp2> Element;
};

struct Hello2 {
   std::map<std::string, WebAppTest2> Element;
};

Hello2 MyWAT2;