为什么我没有收到错误消息? 我有三个名为DataType.h,printInt.h,printStr.h和一个myApp.c的头文件。
DataType.h
typedef int Integer;
typedef char String;
printInt.h
#include "DataType.h"
void printInt(Integer);
printInt.c
#include "printInt.h"
#include <stdio.h>
void printInt(Integer number){
printf("%d\n", number);
}
printStr.h
#include "DataType.h"
void printStr(String*);
printStr.c
#include "printStr.h"
#include <stdio.h>
void printStr(String *str){
printf("%s\n", str);
}
myApp.c
#include "printStr.h"
#include "printInt.h"
Integer main(void){
printInt(20);
printStr("hello");
return 0;
}
显然,我已经将DataType.h包含了两次,并且我没有使用#ifndef来避免重新定义Integer和String。请有人告诉我如何获取错误消息以证明该指令正常工作。
#ifndef __DATATYPE_H
#define __DATATYPE_H
typedef int Integer;
typedef char String;
#endif
无论是否有#ifndef,gcc编译器(版本5.4.0)都不会生成任何错误消息。怎么了?
答案 0 :(得分:1)
typedef
的定义和函数原型可以根据需要多次出现。例如:
typedef int lala;
typedef int lala;
void somePrototype();
void somePrototype();
int main() {
return 0;
}
编译得很好:https://ideone.com/4EjfaR
尝试将函数的定义添加到头文件中。然后,您将看到重新定义错误,并需要一个标题保护。