Если у вас есть C файл, скомпилированный с компилятором C и определяющий поведение для C, но не С++, можете ли вы связать его с С++ файлом и не иметь поведение undefined?
в blah.c(файл скомпилирован как C)
struct x {
int blah;
char buf[];
};
extern char * get_buf(struct x * base);
extern struct x * make_struct(int blah, int size);
blah_if.h
extern "C"
{
struct x;
char * get_buf(struct x * base);
struct x * make_struct(int blah, int size);
}
some_random.cpp(скомпилирован с компилятором С++)
#include "blah_if.h"
...
x * data=make_struct(7, 12);
std::strcpy(get_buf(data), "hello");
Использует определенное поведение в элементе C гибкого массива в файле, скомпилированном с компилятором C, определяется поведение при использовании файла, скомпилированного как С++ и связанного с объектом из компилятора C?
Обратите внимание, что поскольку используется компилятор C и struct x
непрозрачен, это отличается от:
Предоставляет ли extern C с С++ поведение undefined, которое является законным в C, но не С++?