@anchor{Test Functions}
Объявления функций в тестовой программе должны быть с помощью условной компиляции объявлены как для компилятора C++, так и для компилятора C. На практике, однако, тестовые программы редко нуждаются в функциях, которым передаются аргументы.
#ifdef __cplusplus foo(int i) #else foo(i) int i; #endif
Функции, которые объявляются в тестовых программах, должны быть также объявлены с применением прототипов `extern "C"', для использования с компиляторами C++. Убедитесь, что вы не включаете заголовочные файлы, содержащие конфликтующие прототипы.
#ifdef __cplusplus extern "C" void *malloc(size_t); #else char *malloc(); #endif
Если тестовая программа вызывает функцию с неправильными параметрами
(просто чтобы убедиться, что такая существует), то организуйте
программу таким образом, чтобы эта функция никогда не была вызвана. Это
можно сделать путем вызова ее в другой функции, которая никогда не
вызывается. Вы не можете сделать это, поместив вызов функции после
вызова функции exit, поскольку GCC версии 2 знает о том, что
функция exit никогда не возвращается в точку вызова, и оптимизирует
любой код, который следует за ней в том же блоке.
Если вы включаете какой-либо заголовочный файл, то убедитесь, что
функции, находящиеся в этих файлах, вызываются с правильным числом
параметров, даже если все эти параметры равны нулю. Это нужно, чтобы
избежать ошибок компиляции из-за
несоответствия прототипов. GCC версии 2 имеет внутренние прототипы
нескольких функций, которые он встраивает в код автоматически; например,
к таким относится
memcpy. Для того, чтобы избежать ошибок при их проверке, либо
передавайте этим функциям правильное количество аргументов, либо
повторно объявите эти функции с другим типом возвращаемого значения
(например, как char).
Go to the first, previous, next, last section, table of contents.