当我使用当前年份编译我的源代码以从2014 打印 Hello时,无需编辑源代码。我想过制作一个新标题。我的来源为year.c
,因此标题为year.h
。
有没有办法让函数返回YEAR + 1?
还有另一种方法吗?如果是这样,怎么样?我也不知道如何制作头文件。
我的代码是
#include <stdio.h>
#ifndef YEAR
#define YEAR "2013"
#endif
int main() {
printf("Hello from" YEAR ); return 0;
}
答案 0 :(得分:3)
在编译时,您也可以predefine a macro将参数传递给编译器,如下所示:
-D name=definition
如果你正在使用GCC,你可以编译你的代码:
gcc -D YEAR=2014 myProgram.c -o myProgram
这样,您可以在编译时完全控制宏,而无需更改代码。此选项对于处理调试信息非常有用。
请注意,此宏是在预处理源文件之前定义的,因此当您的代码点击#ifndef YEAR
时,就会有一个名为YEAR
的宏。
此外,您还应该更新printf()
对此的调用:
printf("Hello from %d", YEAR);
因为YEAR
被认为是一个数字值,而不是字符串文字。
答案 1 :(得分:2)
我不知道如何制作头文件。
要使用标题文件,只需使用#include
即可引用它。
在您的示例中,在您的文件year.c
中添加:
#include "year.h"
然后显然使用适当的内容创建文本文件text.h
。
一种推荐的做法,虽然不是必不可少的,但是使用头文件“wrapper”来防止头文件被重复读取(浪费时间重新处理同一个文件),这在复杂的大型项目中最有用。相互依赖使得多次间接包含相同的头文件变得容易。
示例:
/* year.h - Documentation */
#ifndef YEAR_H
#defined YEAR_H
...
/* header file's 'actual' content */
#define CURRENT_YEAR "2014"
...
#endif
/* ifndef YEAR_H */
当我编译我的源代码以使用当前年份从2014打印Hello时,无需编辑源代码。
有多种方法可以实现这一点,我将以这种方式展示。
在标准C(C89 / 90,C99或C11)中,编译器(或其预处理器)将自动为__DATE__
生成宏定义,作为包含日期(包括年份)的字符串。
您可以编写一个解析此字符串的函数,仅返回年份,作为整数值。
#include <string.h>
#include <stdlib.h>
int get_year_compiled(void) {
char* date = __DATE__;
char *year;
year = date + strlen(date) - 4; /* Pointer arithmetic for fun and profit */
return atoi(year);
}
有没有办法让函数返回YEAR + 1?
这可以很容易地作为上一个问题的扩展。
首先提到__DATE__
,感谢@ Andrew-Medico。
答案 2 :(得分:1)
您可以通过以下方式重新定义宏:
#ifdef YEAR
#undef YEAR // This line destroys the "old" definition of YEAR
#endif
#define YEAR "2014"