Сгенерированный код C (из Pro*C) содержит абсолютный путь.

StackOverflow https://stackoverflow.com/questions/9495538

  •  14-11-2019
  •  | 
  •  

Вопрос

Я проверяю код C, созданный из Про*С много лет назад, и я нашел это:

static const struct sqlcxp sqlfpn =
{
    33,
    "d:¥¥VS¥¥Projects¥¥SOMEDIR¥¥somefile.pc"
};

Абсолютные пути в коде запрещены нашими правилами качества.
Действительно ли конвертер Oracle Pro*C→C настолько плох, или я что-то пропустил?

Это было полезно?

Решение

Это используется недокументированными sqlctx() функция, и я не думаю, что вы можете запретить Pro*C генерировать эту структуру.Я не уверен, что это по сути плохо, это просто то, что появляется в сгенерированном коде и используется внутри Oracle.

Вы также увидите полный путь к оригиналу .pc файл в #line директивы, если у вас есть LINES опция прекомпилятора включенный.(Это позволяет компилятору C сообщать об ошибках по номеру строки в исходном файле, что гораздо удобнее, чем пытаться выяснить это по строке в сгенерированном исходном коде).

Подозреваю, но не совсем уверен, что это включено в sqlctx() поэтому это значение можно использовать и для внутренних ошибок и, возможно, для отладки.

С точки зрения стандартов кодирования наличие полных путей в исходном коде, вероятно, считается плохим, поскольку вам придется прикасаться к коду, если пути изменятся;но это кажется довольно спорным в сгенерированном коде, поскольку новый путь будет выбран автоматически при следующей сборке.Однако если есть другие причины - возможно, общее требование безопасности для раскрытия минимальной информации о сборке - тогда вы должны знать, что полный путь также появится в конечном двоичном файле.(В Linux strings показывает полный путь;понятия не имею об эквиваленте для Windows, но думаю, что он где-то есть).Если вы проверяете сгенерированный код, то это звучит скорее как безопасность, чем практическая вещь.

Вы можете избежать указания полного пути, если это действительно важно, перейдя в исходный каталог и просто указав имя файла без пути в iname, т.е.

cd d:\VS\Projects\SOMEDIR
proc iname=somefile.pc ...

вместо

proc iname=d:\VS\Projects\SOMEDIR\somefile.pc

Другие советы

На самом деле есть причина: E10825 P313:

Примечание. Значение хеша SQLCTX генерируется на основе Intame Параметр передан в команду Pro * C / C ++.Это может вызвать проблемы В приложениях, где файлы, имеющие одно и то же имя, хранятся в Разные каталоги, содержащие разные функции и сборку Сценарии отправляются в физический каталог для предварительно предложенной программы. В результате нет необходимости размещать макияж на более высоком уровне и предварительно предложенные файлы с использованием их пункт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top