/*you cannot change anything from here below*/ main() { exit(0); } /*you cannot change anything from here up*/ This was asked during an interview.I was told to print something on console.anybody?
10 Réponses :
question étrange ...
Pas que cela soit pertinent, mais je ne vois pas comment cela prouve la compétence du demandeur.
Peut-être que les candidats retenus seront nécessaires pour utiliser cette technique en production
Peut-être que cela teste si le demandeur est capable de faire du débogage Printf sans toucher le code? S'il est conscient des possibilités du préprocesseur? Ou quoi que ce soit d'autre. Bien qu'un demandeur compétent ne soit pas conscient de cela pourrait l'apprendre dans quelques heures, même s'il n'a pas une réponse immédiate ...
#include <stdio.h> #define exit(c) return puts("foobar"),0 over main
Un mode de mise en œuvre défini serait d'utiliser les directives pragma code> à imprimer pendant la compilation.
#define exit(x) printf("Hello, world!")
int main() {
exit(0);
return 0; /* if pre-C99 */
}
Parce que "ça marche sur mon compilateur" ne signifie pas nécessairement "ça marche"?
@ Steve314: Je pense avoir précisé qu'il n'y a pas de moyen conforme de le faire (notez la partie à propos de UB).
#include <stdio.h> #pragma message("Some foobar") #error This is an error message int main() { exit(0); } I think the interviewer wanted to know if you're aware of the #error directive ... just my 2 cents.
Le message apparaîtra dans le compilateur, pas la console.
@Tenfour dans la console de sortie du compilateur
Si vous ne trouvez pas de solution de contournement pour modifier ce fichier, utilisez un fichier C différent. P>
nah..he a été énervé quand j'ai dit que
HAHAHA Il a été énervé par vous pour avoir donné des solutions valides à sa question d'entrevue ridicule: P Cela a dû être une interview amusante. Faites-nous savoir si vous obtenez / acceptez le travail :)
Strictement parlant, la question pose "imprimer quelque chose à la console" - le moyen le plus simple de le faire serait "écho quelque chose". N'écrivez pas de code si vous avez déjà obtenu le bon outil compilé et installé sur des millions de machines.
La plupart des réponses impliquent l'instruction #define c-préprocesseur pour modifier ce que signifie le programme. La plupart des compilateurs soutiennent également quelque chose comme les détails dépendent du fournisseur du compilateur. Vous pouvez faire fonctionner le code avant que Main (*) soit appelé de cette façon. P> p>
Vraiment surpris que personne n'a déjà posté cela: impression au moment de l'exécution et aucun comportement indéfini gratuit. P> P>
#define exit(x) (printf("Bye")) int main(int argc,char* argv) { exit(0); getchar(); return 0; }
Solution 1 b>
Cela fonctionne sans aucune directive de préprocesseur en cl et gcc, bien que je ne l'ai pas testé pour vous assurer que je ne suis pas en utilisant des extensions. P>
#include <stdio.h> static void exit() { printf("Hello world"); } /*you cannot change anything from here below*/ main() { exit(0); } /*you cannot change anything from here up*/
#define code> principal ou sortie à quelque chose qui appelle ifdef li>
- utiliser
#if 0 code> pour empêcher le code existant en cours de compilation li>
- en utilisant
message #pragma code> ou #error code> pour imprimer un message au moment de la compilation li>
- en utilisant
#pragma démarrage code> pour utiliser une autre fonction comme principale ou d'exécuter du code démarrage avant principal. Li>
Ul> Solution 3 b> p>
Si votre compilateur prend en charge tout C ++ dispose en plus de C, il y a beaucoup de réponses: p>
- Déclarez une classe avec un constructeur et une variable statique de ce type li>
- Mettez la fonction « principale » existant dans une (définition ou de classe) espace de noms séparé et écrire un principal global différent li>
Ul>
Solution 4 b> p>
I aussi cherché un moyen de forçage d'une erreur d'exécution (débordement de pile, sur la mémoire, déréférencer nulle, tc), qui normalement faire le programme pour imprimer quelque chose, mais n'a pas pu trouver une façon qui ne comportait pas en cours d'exécution du code supplémentaire, auquel cas le code supplémentaire pourrait aussi bien être printf. p> p>
Si vous avez interprété la question à signifier que vous ne pouviez pas ou n'auriez pas été autorisé à modifier le fichier en commentant en commentant / * * / code> ou en utilisant
#ifdef _comment_me_out__ #endif code> respectivement Au-dessus et au-dessous de la section, vous n'êtes pas autorisé à modifier, puis à introduire une nouvelle principale, vous devez donner une réponse à utiliser un autre fichier. p>
Très probablement, l'intention est de rendre le programme résultant imprimer quelque chose; générer un message compilateur ne suffira probablement pas.
Il y a eu des questions similaires qui ont récemment été récemment impliquant comment-faire-i-make-the-basic-syntaxe-do-quelque chose-quelque chose - non-signifiable à faire. Le concours C Obfusculé C a-t-il récemment décédé, donc une charge de juges cherche maintenant un emploi alternatif?
L'absurdité de l'entretien i> questions ici ne cesse jamais de m'étonner.