Включите код C99, используя ключевое слово ограничения в исходном коде C++.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Включите код C99, используя ключевое слово ограничения в исходном коде C++.

Сообщение Anonymous »

Мы используем extern "C" { ... для включения заголовочных файлов C в C++. Кажется, это не работает, если в файле C используются ключевые слова C99, такие как ограничения. Например:
test.h

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

#ifndef TEST_H
#define TEST_H

extern void test(int * restrict x, const int * restrict y);

#endif
test.c

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

#include "test.h"

int main(void)
{
int n = 1;
int m = 2;
test(&n, &m);
return 0;
}
test.cpp

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

extern "C" {
#include "test.h"
}

int main(void)
{
int n = 1;
int m = 2;
test(&n, &m);
return 0;
}
Если мы запустим gcc -Wall -Wextra -Wpedantic test.c -c или clang -Weverything test.c -c, компиляция выполняется автоматически без ошибки или предупреждения. Однако g++ test.cpp -c приводит к ошибке. Аналогично, clang++ test.cpp -c завершается с ошибкой.
Вопрос:
Есть ли переносимый способ использования C99 (или более высокие) ключевые слова в файле заголовка, а затем включить этот файл заголовка для использования в C++? В различных библиотеках C используется ключевое слово strict, и было бы желательно иметь возможность использовать их в библиотеке C++. В качестве простого примера, версия memcpy на C (я знаю, что версия memcpy на C++ не использует ограничения, конечно, но это достаточно простой пример):
https://en.cppreference.com/w/c/string/byte/memcpy
Обратите внимание: Нет -портативные решения существуют. Например:

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

#if defined(__GNUC__) || defined(__clang__)
// GCC or clang
#define restrict __restrict__
#else
// MSVC
#define restrict __restrict
#endif
или что-то подобное. Мне нужны портативные, соответствующие стандартам решения.

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-c-source
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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