Я пытаюсь оценить Saxon- C 1.2.1 HE на CentOS8, и кажется, что установка прошла нормально. Попытка сэмплов с помощью cd samples/cppTests && build64-linux.sh
, однако, приводит к множеству ошибок компиляции в следующем порядке:
.. / .. / Saxon. C .API / SaxonProcessor.h: 599: 32: ошибка: деление 'sizeof (JNINativeMethod *) / sizeof (JNINativeMethod)' не вычисляет количество элементов массива [-Werror = sizeof-pointer-div] gMethods, sizeof (gMethods) / sizeof (gMethods [0] ));
Прежде чем я кратко и достоверно выключил -Werror = sizeof-pointer-div, я проверил исходный код, и то, что там происходит, кажется сомнительным.
bool registerCPPFunction(char * libName, JNINativeMethod * gMethods=NULL){
if(libName != NULL) {
setConfigurationProperty("extc", libName);
}
if(gMethods == NULL && nativeMethodVect.size()==0) {
return false;
} else {
if(gMethods == NULL) {
//copy vector to gMethods
gMethods = new JNINativeMethod[nativeMethodVect.size()];
}
return registerNativeMethods(sxn_environ->env, "com/saxonica/functions/>
gMethods, sizeof(gMethods) / sizeof(gMethods[0]));
}
return false;
}
более конкретно, sizeof(gMethods) / sizeof(gMethods[0])
, похоже, не рассчитывает что-либо полезное с какой-либо разницей. Скорее всего, было намерение вывести некоторый код, который достиг бы того же значения, что и nativeMethodVect.size()
, но, видя исходный код этого проекта в первый раз, я мог ошибиться, а разделение было на самом деле намеренным?
Я склонен догадываться, что на самом деле намерение было ближе к b, чем к a в следующем примере:
#include <cstdio>
struct test
{
int x, y, z;
};
int main()
{
test *a = new test[32], b[32];
printf("%d %d\n", sizeof(a)/sizeof(a[0]), sizeof(b)/sizeof(b[0]));
return 0;
}
, который выдает 0 32, что ожидается, так как sizeof (a) дает размер указателя, а не размер области памяти массива.