Ответ 1
Правильно - стандарт C не поддерживает аргументы по умолчанию, ни в стандарте C89, ни в стандарте C99 (а также в стандарте C2011). В некоторых компиляторах могут существовать расширения для компилятора, но они не являются стандартными.
У меня есть программа C, называемая функцией opencv2.0:
cvSaveImage( out_img_name, img);
Компилятор gcc сообщает, что
слишком мало аргументов для функции cvSaveImage
Прототипом cvSaveImage в highgui.h является
CVAPI (int) cvSaveImage (const char * filename, const CvArr * image, const int * params CV_DEFAULT (0))
После того, как я изменил свой вызов на
cvSaveImage( out_img_name, img, 0);
Компиляция наконец-то успешна. Означает ли это, что значения по умолчанию для аргументов функции поддерживаются только в С++, но не C?
Спасибо и приветствую!
Правильно - стандарт C не поддерживает аргументы по умолчанию, ни в стандарте C89, ни в стандарте C99 (а также в стандарте C2011). В некоторых компиляторах могут существовать расширения для компилятора, но они не являются стандартными.
C требуется специальное обозначение, если вы хотите использовать переменное количество аргументов.
http://www.swig.org/Doc1.3/Varargs.html
Вы не можете определить переменную по умолчанию, которая будет передана простой функции. Вы можете настроить макрос, который автоматически магически передает значение по умолчанию, и использовать его как свою запись функции, если вы хотите.