菜鸟救助! c++ 一个改错题,在线(是不是所有的头文件,都要经过#ifndef/#define/#endif预处理防止重复

作者&投稿:初韦 (若有异议请与网页底部的电邮联系)
“#ifndef #define #endif ”防止头文件被重复包含~

一般不要前缀_A1,常写成A1_H,会和内部名称冲突。
如果没有定义_A1则定义_A1,然后继续编译知道#endif之前的。如果已经定义过了_A1(包含过了该头文件),则不再编译在#endif之前的内容。
不知道这么说能明白么

//b.h文件
#include "a.h"

//c.h文件
#include "a.h"
#include "b.h"

在c.h文件中,a.h文件被包含了两次.而C++规定在同一文件中只能将同一个头文件包含一次.#ifndef,#define,#endif可以避免多次包含同一头文件.

//新的c.h文件
#ifndef C_H_H
#define C_H_H
#include "a.h"
#include "b.h"
...
#endif

编译器连接c.h文件时,第一次遇到a.h文件,名称C_H_H还没有被定义,编译器将查看#ifndef和#endif之间的内容.如果在同一文件中遇到其他包含a.h的代码,编译器将知道C_H_H名称已经被定义了,从而忽略其中的内容.

答案是正确的。
这个题目主要是考编程者的使用习惯,在软件编程中,需要使用#ifndef/#define/#endif,这不但是个好习惯,而且能有效的防止重复引用。
就这个题的程序本身拿到编译器中编译,肯定是能够通过的。

LZ理解不正确,答案说的预处理防止重复引用是针对global.h而言,而#include<iostream>只是预处理iostream头文件而已。所以答案是正确的。
每定义一个头文件都需要预处理防重复引用,#ifdef #define #end 是头文件的基本格式,必须要有。

不是要预处理 而是避免重复编译 不然会出行多定义的情况
可以
预编译#pragma once 使文件只编译一次


秦安县15067375425: 菜鸟救助! c++ 一个改错题,在线(是不是所有的头文件,都要经过#ifndef/#define/#endif预处理防止重复 -
国滕迈思: 答案是正确的.这个题目主要是考编程者的使用习惯,在软件编程中,需要使用#ifndef/#define/#endif,这不但是个好习惯,而且能有效的防止重复引用.就这个题的程序本身拿到编译器中编译,肯定是能够通过的.

秦安县15067375425: ~~ c++ 菜鸟求救 高手请帮忙~~ -
国滕迈思: st stud1(10011,10012.19); 应改为st stud1(10011,10012, 19); 或者再加一个参数

秦安县15067375425: C++菜鸟求助高手,急需!!!!(2个改错) -
国滕迈思: 第一个是你要给t.hour附值,却用了const,而const的作用是不允许改变变量的值,所以错了.#include using namespace std;class Time{ public: Time(int,int,int); int hour; int minute; int sec;};Time::Time(int h,int m,int s){ hour=h; minute=m; sec=s;}...

秦安县15067375425: VC++菜鸟求助,一串小代码 -
国滕迈思: #include <iostream> using namespace std; int main() { int ary[10]; int i=0; for(i=0;i<10;i++) {ary[i]=i*3; } int total=0; for(i=0;i<10;i++) {total+=ary[i]; } int avg=total/10; cout<<"ary[i]"<<ary[i]<<endl; cout<<"Average is:"<<avg<<endl; cin.get(); return 0;}

秦安县15067375425: C++菜鸟求错
国滕迈思: 你的程序没有错,可以改成如下也是对的 #include <iostream> using namespace std;int main(){ cout <<"C++程序"; return 0;}

秦安县15067375425: C++菜鸟求助,unknown software exception (0xc0000094)怎么回事? -
国滕迈思: 你的程序是准备做什么的?for(i=2;i<sqrt(100);i++) { for(j=i+1;j<=100;j++) { if(arr[j]%arr[i]==0) { arr[j]=0; } } } 这部分会导致你其中有些arr[j]变成0了,然后又让0作为除数在arr[j]%arr[i]这里进行运算,所以出错了.

秦安县15067375425: c++高手帮帮忙 一个菜鸟问题 -
国滕迈思: #include using namespace std; void main() { int i=2,j=1,k,n; int fang; double sum=0.0; cin>>k; for(n=1;n{ fang=i; sum+=(double)i/j; i+=j; j=fang; } cout} 这道是很简单的算法.就是 分子=前一项分子+分母;分母=等于前一项分母;

秦安县15067375425: 本人菜鸟 请高手修改下 我想写一个C++程序 输入用户名 和 密码
国滕迈思: char name,key; 改成 char name[10],key[10]; 你的程序有点问题,你看改成这样应该就好点了 #include <iostream> using namespace std; int main() { char name[10],key[10]; cout<<"用户名:"; cin>>name; cout<<"请输入密码:"; cin>>...

秦安县15067375425: C++中将变量改用十六进制显示,菜鸟求助~
国滕迈思: num1声明为整型就可以 #include <iostream>using namespace std;int main(){ int num1; cout<<"Please input a number:"; cin>>num1; cout<<hex<<num1<<endl; cout<<oct<<num1<<endl; return 0;}

秦安县15067375425: 又一个菜鸟问题了`C++在一个字符串中删除另一个字符串 求助呀`` -
国滕迈思: while (*q!='\0'&&*p!='\0') { if (*p==*q) { p++; q++; } else p++; } 这一段的逻辑有问题.比如输入123456 再输入34 按照你的代码的意思只是将P指向了5 所以你输出P的时候只有56了 而之前指向12的时候你还在while循环中且没有输出.综合最后的结果就成你现在看到的了 我写了一段,你参考下吧:while(*p!='\0') { if(*p==*q) { while(*q!='\0') { p++; q++; } }coutp++; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网