大多数人在他们的代码中写这个。这是什么意思?#ifndef有什么用。
#ifndef
#ifndef ONLINE_JUDGE freopen("E://ADpan//in.in", "r", stdin); freopen("E://ADpan//out.out", "w", stdout); #endif
oyxsuwqo1#
粗略的谷歌搜索一下就找到了this post。在一些在线编码竞赛中,预定义的输入被发送到stdin,并期望在stdout上进行。当在本地测试和开发时,一些人更喜欢破解他们的程序以从文件中读取,这样他们就不必执行以下操作
stdin
stdout
test_program < input | diff - expected_output
最后,ONLINE_JUDGE宏是在竞争环境中定义的,因此使用stdin/stdout,而本地编译将不具有该宏,因此从这些文件读取。
ONLINE_JUDGE
k75qkfdt2#
此行代码由在文本编辑器而不是IDE中编写代码的竞争程序员使用。默认情况下,在大多数在线评审中提交代码时定义ONLINE_JUDGE常量,例如:codeforces或codechef。它帮助代码确定代码是在在线法官还是在本地系统机器上运行。该行代码用于代码在本地机器上运行时从文件而不是stdin进行读写,以及在在线法官中运行时分别从stdin和stdout进行阅读。
k75qkfdt3#
作为一个有竞争力的程序员,我经常使用这个方法。这意味着在测试和实现过程中,你可以做一些特定的事情--在这个例子中,你从文件中阅读stdin和stdout,以使调试更容易。当代码在线编译和提交时,ONLINE_JUDGE标志被设置,这样它就不会运行,他们可以使用特定的文件来验证你的程序。
x759pob24#
关于freopen()的第一部分问题:在竞争性程序设计中,许多竞赛都要求输入输出符合标准的输入输出要求(例如,许多USACO问题)要求您从文件中读取和写入。freopen()命令在<stdio.h>头文件中定义,并允许您将输入/输出流重定向到文件。您可以选择读取或写入文件,以及一些其他操作文件的方法,如append。文档可以在here中找到。为了回答问题的第二部分"#ifndef是什么",您需要了解以下几点:
freopen()
<stdio.h>
#include "filename"
现在,回答你的问题:#ifndef是一个预处理器指令,代表"if not defined",它总是与#define和#endif成对出现,通常用作include guard。这可以防止文件无限地相互包含,或者每个文件定义相同的类/函数两次,这两种情况都会导致错误。例如:
#define
#endif
//file "person1.h" #include "person2.h" #ifndef PERSON1_H #define PERSON1_H class Person { int age; }; #endif
//file "person2.h" #include "person1.h" #ifndef PERSON2_H #define PERSON2_H class Person { int age; }; #endif
如果你没有把#ifndef放在上面的文件中,那么person1.h会用person2.h的文本内容替换第一行,但是注意person2.h也有一个#include person1.h,这会产生一个无限循环,另外,你也会定义两次Person类,这是非法的。
4条答案
按热度按时间oyxsuwqo1#
粗略的谷歌搜索一下就找到了this post。在一些在线编码竞赛中,预定义的输入被发送到
stdin
,并期望在stdout
上进行。当在本地测试和开发时,一些人更喜欢破解他们的程序以从文件中读取,这样他们就不必执行以下操作最后,
ONLINE_JUDGE
宏是在竞争环境中定义的,因此使用stdin
/stdout
,而本地编译将不具有该宏,因此从这些文件读取。k75qkfdt2#
此行代码由在文本编辑器而不是IDE中编写代码的竞争程序员使用。默认情况下,在大多数在线评审中提交代码时定义ONLINE_JUDGE常量,例如:codeforces或codechef。它帮助代码确定代码是在在线法官还是在本地系统机器上运行。该行代码用于代码在本地机器上运行时从文件而不是stdin进行读写,以及在在线法官中运行时分别从stdin和stdout进行阅读。
k75qkfdt3#
作为一个有竞争力的程序员,我经常使用这个方法。这意味着在测试和实现过程中,你可以做一些特定的事情--在这个例子中,你从文件中阅读
stdin
和stdout
,以使调试更容易。当代码在线编译和提交时,ONLINE_JUDGE
标志被设置,这样它就不会运行,他们可以使用特定的文件来验证你的程序。x759pob24#
关于
freopen()
的第一部分问题:在竞争性程序设计中,许多竞赛都要求输入输出符合标准的输入输出要求(例如,许多USACO问题)要求您从文件中读取和写入。freopen()
命令在<stdio.h>
头文件中定义,并允许您将输入/输出流重定向到文件。您可以选择读取或写入文件,以及一些其他操作文件的方法,如append。文档可以在here中找到。为了回答问题的第二部分"#ifndef是什么",您需要了解以下几点:
#include "filename"
指令将替换为文件的文本内容。文件可以相互包含,例如,"Person1.h"可以包含"Person2.h",反之亦然。现在,回答你的问题:
#ifndef
是一个预处理器指令,代表"if not defined",它总是与#define
和#endif
成对出现,通常用作include guard。这可以防止文件无限地相互包含,或者每个文件定义相同的类/函数两次,这两种情况都会导致错误。例如:如果你没有把#ifndef放在上面的文件中,那么person1.h会用person2.h的文本内容替换第一行,但是注意person2.h也有一个#include person1.h,这会产生一个无限循环,另外,你也会定义两次Person类,这是非法的。