#c #googletest
#c #googletest
Вопрос:
Я пытаюсь протестировать свой код на C с помощью Google test (никогда раньше с ним не работал), но, похоже, он думает, что я хочу протестировать код на C
23: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
str->data = malloc(buf_size 1);
33: error: invalid conversion from 'void*' to 'char*' [-fpermissive]
char *new_begin = malloc(buf_size 1);
Мой файл тестирования (если вместо включения исходного файла я включаю заголовок, он завершается с ошибкой во время тестирования (или, может быть, даже раньше)
#include <gtest/gtest.h>
extern "C" {
#include "../lib/scr/c_string.c"
}
В целом, я только что изменил код для
str->data = (char*)malloc(buf_size 1);
как это работает на C . К счастью, ничего не разбилось 🙂
Комментарии:
1.
str->data = malloc(buf_size 1);
Это работает как есть на C, но требует приведения в C . Похоже, вместо этого вы компилируете файл C как C . Почему#include "../lib/scr/c_string.c"
и зачем » тестировать мой код на C » с помощью.cpp
файла?2. Я пытаюсь включить свой файл C, как в некоторых примерах, которые я видел в Интернете. что вы подразумеваете под использованием cpp? Насколько я знаю, я не могу создать файл C для Google test.
3. Предполагая
LibTests.cpp
, что это ваш файл, он компилируется как C , потому.cpp
что это расширение по умолчанию для файлов C . Но вы#include
добавляете в него простой код на C, который не будет компилироваться как C , потому что C — это (связанный, но) другой язык. Это приводит к сбою компиляции с указанными вами ошибками.4. Хм, хорошо, вы правы. Я должен найти какой-то другой способ протестировать свой код. Спасибо
Ответ №1:
extern «C» не превращает включенный исходный код в C, он определяет соглашение о связывании для использования для объявлений, которые встречаются в блоке, в который вы включили свой файл.
Другими словами, содержимое вашего файла C копируется в исходный файл C и компилируется как C с использованием соглашений о связывании C.