Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
С++ Mingw тоже не совместим с С++ ABI студии, ничего особо страшного в этом нет.Всяко бывает, в каких-то проектах интерфейсы между библиотеками протянуты C++ные.
С-ABI и COM работают.Что Вы подразумеваете под C-ABI? Например, передача и возврат POD структур по значению в Itanium ABI и msvc организованы по-разному. Да и сам layout структур, кажется, тоже разный (просто передачей по указателю не обойтись).
>cat tst.h tst.c main.c
struct Data
{
char * s;
int x;
double y;
char z;
};
struct Data get_data(int x, char z);
#include "tst.h"
struct Data get_data(int x, char z)
{
struct Data d;
d.x = x;
d.y = (double)(x)/2;
d.z = z;
d.s = "hello, world";
return d;
}
#include "tst.h"
#include <stdio.h>
int main()
{
struct Data d ;
d = get_data(5, 'a');
printf("%s, %i, %lf, %c\n", d.s, d.x, d.y, d.z);
return 0;
}
>cl tst.c -c
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.51106.1 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
tst.c
>gcc main.c tst.obj
Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
>a.exe
hello, world, 5, 2.500000, a
struct S { int x, y; };struct S { int x, y, z; };$ for F in *.{h,c}; do echo "/*** $F ***/"; cat $F; echo; done
/*** h.h ***/
struct S {
double f;
};
struct S f(void);
/*** c.c ***/
#include "h.h"
int main(void) {
struct S s = f();
printf("s.f = %lf\n", s.f);
return (s.f != 42.0);
}
/*** m.c ***/
#include "h.h"
struct S f(void) {
struct S ret;
ret.f = 42.0;
return ret;
}
$ (cl -nologo -O2 -c -Foc.obj c.c && cl -nologo -Fec.exe -O2 m.c c.obj) >/dev/null && ./c.exe ; echo $?
s.f = 42.000000
0
$ cl -nologo -O2 -c -Foc.obj c.c >/dev/null && C:/mingw/bin/gcc -O2 m.c c.obj 2>/dev/null && ./a.exe ; echo $?
s.f = 0.000000
1
Записи выступлений: channel9.msdn.com/Events/GoingNative/2013К сожалению, там пока появились только видео первого дня.
Новости о LLVM для Windows