【发布时间】:2018-02-22 00:54:37
【问题描述】:
为什么我没有收到错误消息? 我有三个名为 DataType.h、printInt.h、printStr.h 和一个 myApp.c 的头文件。
数据类型.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 版)都不会产生任何错误信息。怎么了?
【问题讨论】:
-
#ifndef __DATATYPE_H注意:带有前导下划线的预处理器宏名称是保留的。最好不要使用它们。 -
为什么不只是
#pragma once -
他们为什么不工作?它们只是声明。这些可以在不同的地方重复多次,没有问题。
标签: c