Einbindung von ANSI C Code unter MSVS2003.NET (C++ Umgebung)



  • Guten Tag,

    der folgende Code wird vom MSVS2003 Compiler ohne Fehlermeldung und Warnings übersetzt. Jedoch habe ich eine bad access violation zur Laufzeit.

    Wenn ich das von CODE::BLOCKS (GCC) kompilieren lasse wird das Programm normal ausgeführt.

    #include "stdafx.h"
    
    extern "C" {
    
    	#include <stdio.h>
    	#include <stdlib.h>
    	#include <math.h>
    
    	int main() {
    		system("PAUSE");
    		return 0;
    		}
    }
    

    Die Sache sieht zwar nach dummi Anfängerproblem aus, ist es aber nicht!

    **und hier kommen die Randbedingungen:
    - Der C Code soll in C++ eingebunden werden.
    - Das ominöse .NET Framework von Microsoft ist mir dabei völlig egal
    **



  • lovepulse schrieb:

    Die Sache sieht zwar nach dummi Anfängerproblem aus, ist es aber nicht!

    ist es bestimmt.
    nimm doch mal die main aus dem extern "C" block raus



  • das funktioniert nicht, gleicher Fehler wie vorher



  • Ich hab' mal die stdio.h von MSVS2003 geöffnet, da steht ab Zeile 35

    #ifdef  __cplusplus
    extern "C" {
    #endif
    ......
    

    Mit anderen Worten, alle C-Funktionen aus stdio.h sind falls __cplusplus definiert wurde als extern "C" deklariert.
    Nun verstehe ich nicht, was du noch zusätzlich mit extern "C" deklarieren willst ?

    mfg



  • Ich will doch nur diesen ANSI C Code unter MSVS.NET 2003 zum Laufen bekommen:

    int main() {
    	 system("PAUSE");
    	 printf("Hello");
    	 return 0;
    	}
    

    Das klappt auch nicht den Code in die stdio.h unter extern "C" direkt einzubinden



  • lovepulse schrieb:

    Ich will doch nur diesen ANSI C Code unter MSVS.NET 2003 zum Laufen bekommen:

    int main() {
    	 system("PAUSE");
    	 printf("Hello");
    	 return 0;
    	}
    

    Deine extern C kannst du rausschmeissen. 😉

    Datei/Neu/Projekt/Win32/Win32-Konsolenprojekt/
    Dann den Namen eingeben, z.B. test usw.

    Das vorgefertigte:

    int _tmain(int argc, _TCHAR* argv[])
    {
    	return 0;
    }
    

    Kannst du auch rausschmeissen und mit deiner Version ersetzen.
    Funzt.
    🙂



  • Es funzt. Leider habe ich nicht an diese Triviallösung geglaubt.
    GOTO _Semester_1 🙄 😕



  • Vermutlich ist das der Grund warum die Lösungsfindung verhältnismäßig viel Text verursacht hat - hier hätte wohl niemand vermutet dass der VC++2003 nicht in der Lage ist ANSI-C Code (als .c-Datei) zu kompilieren 😉


Anmelden zum Antworten