As variáveis globais parecem ser inicializadas com zero, mas tenho visto inicializações diferentes no corpo de funções na primeira passagem. Tento sempre inicializar antes de usar. Embora eu concorde, o comportamento deve ser inequívoco.
E outra declaração no corpo do laço, entre parênteses, torna a variável local ao laço. Só não está nos documentos.
Se os loops forem os mesmos, então o comportamento do compilador deve ser o mesmo, e é diferente. É aqui que reside o erro. Explicou porque existe um aviso no caso (1), depois explique porque não existe um no caso (2) ? O que mudou em princípio? E então, se uma variável não inicializada é utilizada, porque é que o resultado final é correcto ao executar o código?
Existe uma tal ciência - lógica. Se A e B são os mesmos e A é vermelho, B também deve ser vermelho, não verde
Não estudei programação, só posso especular logicamente, como Vasily Ivanovich e Petka especularam em lógica.
No primeiro caso, toda a cadeia é executada
for ( int i = 0, j; i < 10; i = j )
e aqui a variável j não é inicializada, mas o seu valor é atribuído à variável i
No segundo caso, mesmo que a variável j não seja inicializada, na linha seguinte onde é utilizada, não é atribuído o seu valor, mas sim o seu valor. Por outras palavras, a variável j é inicializada com o valor da variável i
As variáveis globais parecem ter sido inicializadas com zero, mas o corpo da função encontrou diferentes inicializações na primeira passagem. Tento sempre inicializar antes de usar. Embora eu concorde, o comportamento deve ser inequívoco.
E outra declaração no corpo do laço, entre parênteses, torna a variável local ao laço. Os docs simplesmente não o têm.
Sim, eu também inicializo sempre as variáveis, é como duas vezes duas,devo sempre lembrar-me. Apanhei-o na minha cabeça a partir da língua C ) Portanto, este exemplo de um loop com uma variável não inicializada é uma má prática.
Sim, eu também inicializo sempre variáveis, é como duas vezes duas,tenho de me lembrar sempre. Apanhei-o na minha cabeça a partir da língua C ) Portanto, este exemplo de um loop com uma variável não inicializada é uma má prática.
É necessário inicializá-lo, mas apenas com um valor significativo. Não existe tal valor no exemplo acima, por isso não é uma má prática e é a única forma possível. Caso contrário, haveria uma dupla inicialização
int f( int i ) { /*вычисления*/ }
void g( int k )
{
for ( int i = 0, j; i < k; i = j )
{
j = f( i );
/*вычисления*/
}
}
Inicializar, mas apenas com um valor significativo. Não existe tal valor no exemplo acima, por isso a prática não é má, é a única possível. Caso contrário, haveria uma dupla inicialização
O que mudaria se fosse rubricado
int f( int i ) { /*вычисления*/ }
void g( int k )
{
for ( int i=0, j=0; i < k; i = j )
{
j = f( i );
/*вычисления*/
}
}
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
Você tem um número aleatório 0, eu tenho 540016640
mas continuam a ser números aleatórios.
Pensei que a MQ estava zerada.
Pensei que a MQ estava zerada.
As variáveis globais parecem ser inicializadas com zero, mas tenho visto inicializações diferentes no corpo de funções na primeira passagem. Tento sempre inicializar antes de usar. Embora eu concorde, o comportamento deve ser inequívoco.
E outra declaração no corpo do laço, entre parênteses, torna a variável local ao laço. Só não está nos documentos.
Além disso, o compilador não avisa que a variável não é inicializada.
Imprimir(...) não pode avisá-lo como se o parâmetro fosse passado por uma referência não-constante
Se os loops forem os mesmos, então o comportamento do compilador deve ser o mesmo, e é diferente. É aqui que reside o erro. Explicou porque existe um aviso no caso (1), depois explique porque não existe um no caso (2) ? O que mudou em princípio? E então, se uma variável não inicializada é utilizada, porque é que o resultado final é correcto ao executar o código?
Existe uma tal ciência - lógica. Se A e B são os mesmos e A é vermelho, B também deve ser vermelho, não verde
Não estudei programação, só posso especular logicamente, como Vasily Ivanovich e Petka especularam em lógica.
No primeiro caso, toda a cadeia é executada
e aqui a variável j não é inicializada, mas o seu valor é atribuído à variável i
No segundo caso, mesmo que a variável j não seja inicializada, na linha seguinte onde é utilizada, não é atribuído o seu valor, mas sim o seu valor. Por outras palavras, a variável j é inicializada com o valor da variável i
Aqui está também uma variante sem avisos
Não estudei para ser um programador, só posso especular logicamente, como Vasily Ivanovich e Petka especularam sobre a lógica.
No primeiro caso, toda a cadeia é executada
e aqui a variável j não é inicializada, mas o seu valor é atribuído à variável i
E quem o estudou? Penso que a maioria das pessoas aqui (como eu) são autodidactas.
É necessário estudar o para operador de laço para compreender a sequência de operações. Em (1 ), é atribuído à variável j o valor de i+1
j = i+1antes de aparecer à direita do operador de cessão
As variáveis globais parecem ter sido inicializadas com zero, mas o corpo da função encontrou diferentes inicializações na primeira passagem.
Tento sempre inicializar antes de usar. Embora eu concorde, o comportamento deve ser inequívoco.
E outra declaração no corpo do laço, entre parênteses, torna a variável local ao laço. Os docs simplesmente não o têm.
Sim, eu também inicializo sempre as variáveis, é como duas vezes duas,devo sempre lembrar-me.
Apanhei-o na minha cabeça a partir da língua C )
Portanto, este exemplo de um loop com uma variável não inicializada é uma má prática.
Sim, eu também inicializo sempre variáveis, é como duas vezes duas,tenho de me lembrar sempre.
Apanhei-o na minha cabeça a partir da língua C )
Portanto, este exemplo de um loop com uma variável não inicializada é uma má prática.
É necessário inicializá-lo, mas apenas com um valor significativo. Não existe tal valor no exemplo acima, por isso não é uma má prática e é a única forma possível. Caso contrário, haveria uma dupla inicialização
Inicializar, mas apenas com um valor significativo. Não existe tal valor no exemplo acima, por isso a prática não é má, é a única possível. Caso contrário, haveria uma dupla inicialização
O que mudaria se fosse rubricado
O que mudaria se fosse rubricado com j=333?
E porquê por zero e não por j=333, digamos? Ou seja, é uma inicialização sem sentido que pode esconder um erro difícil de encontrar
Porquê zero e não 333, digamos? Ou seja, é uma inicialização sem sentido que pode esconder um erro difícil de apanhar
Se precisar de apanhar um erro deste valor, bem, inicialize-o com 333 ))
É apenas um valor inicial.