Тип на основе профсоюза ПУНКТ ИСКУССТВО C/C ++ CODEC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Тип на основе профсоюза ПУНКТ ИСКУССТВО C/C ++ CODE

Сообщение Anonymous »

У меня есть C -кодовая база, которая использует профсоюзы для типа. Затем я проведен модульный тестирование этого кода в C ++ с помощью GMOCK. < /P>
Я знаю, что тип, основанный на объединении, наказание нелегально в C ++, поэтому я хотел убедиться, что мое использование безопасно: < /p>

Код: Выделить всё

// sum_halves.h
#include 
uint32_t sum_halves(unit64_t i);
< /code>
// sum_halves.c
#include "sum_halves.h"
uint32_t sum_halves(unit64_t i) {
union {
uint64_t u64;
uint32_t u32[2];
} u;
u.u64 = i;
return u.u32[0] + u.u32[1];
}
< /code>
// sum_halves_test.cpp
extern "C" {
#include "sum_halves.h"
}
#include 

TEST(sum_halves_test, two_plus_two_is_five) {
EXPECT_EQ(sum_halves(0x0000'0002'0000'0003), 5);
}
Насколько я понимаю, поскольку sum_halves.c составлен в качестве программы C, наказание типа на основе профсоюза является правильным, даже если я позже вызову эту функцию из кода C ++. Но если бы я сделал sum_halves встроенную функцию, то она будет составлена в виде кода C ++ в *.cpp файлах, что приведет к неопределенному поведению. extern "c" не помогает, так как она влияет только на связь, а не компиляция. Флаг компилятора GCC или Clang или #pragma , чтобы разрешить наказание типа на основе союза в определенной функции?


Подробнее здесь: https://stackoverflow.com/questions/795 ... d-c-c-code
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»