Ответ 1
Внутренний параметр
__noop
указывает, что функция должна игнорироваться, а список аргументов анализируется , но для аргументов не генерируется код. Он предназначен для использования в глобальных функциях отладки, которые принимают переменную количество аргументов.
В вашем случае аргумент является явно свободным выражением побочного эффекта, которое можно легко оптимизировать, поэтому это не имеет значения.
Но если выражение аргумента имеет побочные эффекты или является настолько сложным, что компилятор не может доказать, что он заканчивается нормально и не имеет побочных эффектов, то использование __noop
предотвращает потенциально дорогостоящую оценку этого выражения.
Вторым преимуществом является то, что он ведет себя как вызов функции с переменным числом аргументов синтаксически. Таким образом, замена его на вызов функции не влияет на синтаксический анализ программы. С некоторыми другими заменами (например, пустой строкой) это может быть проблемой в некоторых ситуациях.