У нас есть проблема при сборке из-за длинного пути, созданного TFS Team Build, когда параметр CreatePackageOnPublish установлен на истина .
В каталоге PackageTmp (см. рисунок ниже) пакет хранится, {printf ("% u% u% u \ n", sizeof "", sizeof ("" + 0), sizeof (char *)); возврат 0; } выводит 1 4 4 при компиляции с GCC в Linux, но ...
Следующая программа на C:
#include <stdio.h>
int main(void)
{
printf("%u %u %u\n",sizeof "",sizeof(""+0),sizeof(char *));
return 0;
}
выводит 1 4 4 при компиляции с GCC в Linux, но выводит 1 1 4 при компиляции с Microsoft Visual C ++ на Windows. Результат GCC - это то, что я ожидал. Отличаются ли они из-за ошибки MSVC или из-за того, что sizeof ("" + 0) не определено? Для обоих компиляторов поведение (то есть, равно ли напечатанное среднее значение первому или последнему значению) одинаково, независимо от того, какой строковый литерал или целочисленная константа вы используете.
Соответствующая ссылка в стандарте ANSI C кажется быть 6.2.2.1 - Lvalue и указатели функций:
"За исключением случаев, когда это операнд оператора sizeof ... lvalue, имеющий тип 'array of type', преобразуется в выражение, имеющее тип 'указатель на тип' Случайный случайный = новый Случайный (); startMeasuringTime (); двойной результат; т моя консоль отображает символы от 128 до 255? например: cout << "¿" << endl; // перевернутый вопросительный знак Вывод: ┐
Проблема в том, что javac
выполняет множество (очень разумных!) Встроенных оптимизаций, которые не позволяют коду тестировать то, что я хотел бы проверить. Например, один тест пытается проверить, правильно ли обрабатываются интегральные переполнения для всех типов. Вот один снимок:
byte min = (byte)-128;
byte max = (byte) 127;
assertTrue((byte)(max + 1) == min); // Should overflow and work correctly.
Созданный файл .class
имеет результат ((byte) max + 1)
, жестко закодированный как (byte) -128
, что полностью опровергает суть теста.
У меня такой вопрос: есть ли способ отключить оптимизацию в javac
? Мне не удалось найти переключатель командной строки для этого, хотя, возможно, я просто недостаточно внимательно посмотрел. Если нет возможности сделать это, есть ли другой компилятор Java, который может компилировать со всеми отключенными оптимизациями?