mex-файл: компиляция завершается с ошибкой with // comment; но компилируется нормально при использовании /* */

Я пишу файл mex, связывающий код C с Matlab.

Вот мой простой mex-файл, который ничего не делает и отлично компилируется.

#include "mex.h"

#ifndef N
#define N 100
#endif

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    /*validate input/output arguments */

}

Но если я изменю комментарий, вот так:

#include "mex.h"

#ifndef N
#define N 100
#endif

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    //validate input/output arguments

}

то я получаю следующую ошибку:

>> mex mexcallingmatlab.c
Building with 'gcc'.
Warning: You are using gcc version '4.8.2'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently supported
compilers see: http://www.mathworks.com/support/compilers/current_release. 
Warning: You are using gcc version '4.8.2-19ubuntu1)'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently
supported compilers see: http://www.mathworks.com/support/compilers/current_release. 
Error using mex
/home/dkumar/Mex_Codes_DKU/Mex_C_Codes_DKU2/mexcallingmatlab.c: In function ‘mexFunction’:
/home/dkumar/Mex_Codes_DKU/Mex_C_Codes_DKU2/mexcallingmatlab.c:9:5: error: expected expression before ‘/’ token
     // validate input/output arguments */

     ^

Кроме того, если я сохраняю какой-либо файл как файл C++, он всегда компилируется независимо от того, использую ли я // или /* .... */.

Может кто-нибудь сказать мне, почему "//" не работает для комментариев?


person Garima Singh    schedule 27.01.2015    source источник


Ответы (2)


Здесь есть ответ .

Особенно,

В Linux по умолчанию mex добавляет -ansi, что отключает комментарии C++.

person Chostakovitch    schedule 27.01.2015
comment
Если вы найдете дубликат, оставьте ссылку на него в комментарии, чтобы вопрос можно было превратить в перенаправление, а не добавлять повторяющиеся ответы. - person Ben Voigt; 27.01.2015
comment
@Chostakovitch спасибо за перенаправление на исходный вопрос. Следующие команды работают нормально: mex -g -largeArrayDims -ldl CFLAGS=\$CFLAGS -std=c99 mexcallingmatlab.c Не могли бы вы объяснить, что здесь делает -largeArrayDims? - person Garima Singh; 27.01.2015
comment
@GarimaSingh Это не имеет к тебе никакого отношения. Это аргумент, который использовал автор вопроса. Единственная интересная часть для вас - это CFLAGS="\$CFLAGS -std=c99". :) - person Chostakovitch; 27.01.2015

Вероятно, Matlab вызывает компилятор C с аргументами gcc, которые не включают функции C99. Поскольку комментарии в стиле C++ не были частью стандарта C до C99, gcc выдает ошибку.

Вы можете явно установить CFLAGS при запуске mex, чтобы добавить -std=c99. Это должно позволить вам использовать комментарии в стиле C++ (и другие функции).

person nimrodm    schedule 27.01.2015