-
Compile o mesmo programa com as mesmas configurações na mesma máquina:
Embora a resposta definitiva seja "depende", é razoável esperar que a maioria dos compiladores seja determinista a maior parte do tempo e que os binários produzidos sejam idênticos. De fato, alguns sistemas de controle de versão dependem disso. Ainda assim, sempre há exceções; é bem possível que algum compilador decida inserir um timestamp ou algo assim (iirc, o Delphi, por exemplo). Ou o próprio processo de construção pode fazer isso; Eu vi makefiles para programas em C que definem uma macro de pré-processamento para o timestamp atual. (Eu acho que isso contaria como sendo uma configuração de compilador diferente, no entanto.)
Além disso, esteja ciente de que, se você vincular estaticamente o binário, estará efetivamente incorporando o estado de todas as bibliotecas relevantes em sua máquina, e qualquer alteração em qualquer uma delas também afetará seu binário. Portanto, não são apenas as configurações do compilador que são relevantes.
-
Compile o mesmo programa em uma máquina diferente com uma CPU diferente.
Aqui, todas as apostas estão desativadas. A maioria dos compiladores modernos é capaz de fazer otimizações específicas de destino; Se esta opção estiver habilitada, os binários provavelmente serão diferentes, a menos que as CPUs sejam semelhantes (e, mesmo assim, é possível). Além disso, veja a nota acima sobre a vinculação estática: o ambiente de configuração vai muito além das configurações do compilador. A menos que você tenha um controle de configuração muito rigoroso, é extremamente provável que algo seja diferente entre as duas máquinas.