Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erkennt man die CPU-Architektur zur Kompilierungszeit in C/C zuverlässig?

Wie erkennt man die CPU-Architektur zur Kompilierungszeit in C/C zuverlässig?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-11 02:12:02424Durchsuche

How to Reliably Detect CPU Architecture at Compile Time in C/C  ?

Erkennen der CPU-Architektur zur Kompilierungszeit: Ein umfassender Leitfaden

Bei der Entwicklung von C- oder C-Code ist die Bestimmung der Ziel-CPU-Architektur für die Kompilierung wichtig entscheidend, um optimale Leistung und Kompatibilität sicherzustellen. Allerdings verwenden verschiedene Compiler ihre eigenen Präprozessordefinitionen, was es schwierig macht, einen universellen Ansatz zu etablieren.

Glücklicherweise gibt es eine umfassende Methode, um die CPU-Architektur zur Kompilierungszeit zu erkennen, sodass man sich nicht mehr auf andere verlassen muss -Standarddefinitionen. Hier ist eine zuverlässige Lösung:

extern "C" {
    const char *getBuild() {
        #if defined(__x86_64__) || defined(_M_X64)
        return "x86_64";
        #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86)
        return "x86_32";
        #elif defined(__ARM_ARCH_2__)
        return "ARM2";
        #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__)
        return "ARM3";
        #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T)
        return "ARM4T";
        #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_)
        return "ARM5";
        #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_)
        return "ARM6T2";
        #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__)
        return "ARM6";
        #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7";
        #elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7A";
        #elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
        return "ARM7R";
        #elif defined(__ARM_ARCH_7M__)
        return "ARM7M";
        #elif defined(__ARM_ARCH_7S__)
        return "ARM7S";
        #elif defined(__aarch64__) || defined(_M_ARM64)
        return "ARM64";
        #elif defined(mips) || defined(__mips__) || defined(__mips)
        return "MIPS";
        #elif defined(__sh__)
        return "SUPERH";
        #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC)
        return "POWERPC";
        #elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64)
        return "POWERPC64";
        #elif defined(__sparc__) || defined(__sparc)
        return "SPARC";
        #elif defined(__m68k__)
        return "M68K";
        #else
        return "UNKNOWN";
        #endif
    }
}

Dieser Code erkennt eine breite Palette von CPU-Architekturen, die moderne und ältere Plattformen abdecken. Es basiert auf Standard-Präprozessordefinitionen und gewährleistet so die Kompatibilität mit verschiedenen Compilern. Durch die Integration dieser Funktion in Ihren Code können Sie die Zielarchitektur während der Kompilierung genau bestimmen, sodass Sie Ihren Code entsprechend optimieren und plattformspezifische Probleme vermeiden können.

Das obige ist der detaillierte Inhalt vonWie erkennt man die CPU-Architektur zur Kompilierungszeit in C/C zuverlässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn