重復編譯
Ⅰ 頭文件重復編譯
只要簡單的理解為用頭文件裡面的內容替換#include的地方,就可以了。
之所以會重復編譯,是因為你的頭文件有可能相互直接include或者間接include,
直接點比如你add.c中直接使用兩次#include "stdio.h",又stdio.h中有定義函數scanf();
編譯時,編譯器會找到兩個scanf()函數體,編譯失敗。
而加上#ifndef _dedd
#define _dedd
#include"stdio.h"
#endif
(在任何引用stdio.h頭文件的時候都這樣寫),那麼,在第一次編譯器把stdio.h包含過來後,
後面#include "stdio.h"的地方都會檢測到 _dedd已經 define了,所以不會再包含該頭文件。
Ⅱ 如何減少C++程序的重復編譯
可以利用宏定義
假設我定義的宏是_H_
#if!defined_H_//只有在_H_沒有定義時,下面的代碼才會參與定義
#define_H_//定義_H_,阻止第二次編譯
//主體代碼
#endif
如果是VS編譯器也可以直接在最前面加上
#programonce
當然,最好是優化編譯順序,這樣才能從根本上解決問題
Ⅲ 關於單片機C語言!!!為什麼重復編譯會出錯呢!!!
警告一般是不管的,也許有一個變數沒用,也許有一段函數沒用,也許是文件名太長
_crol_ 是自循環左移,實現流水燈
<< 是不循環左移,最後全部移沒了...
Ⅳ 請問keil每次編譯時都重復編譯2次是怎麼回事,詳見下邊兩張圖片
如果KEIL覺得還有代碼優化的空間,就會再編譯一次,甚至兩次,三次,這個沒關系。
Ⅳ 如何改動makefile來避免沒有改動過的.c文件重復編譯
1.所有源文件沒動過,時間戳沒有變,任何操作都沒有;
2.生成的中間文件和目標文件都在,沒動過;
3.我的makefile是把不同目錄生成的所有中間文件都移到同一個obj目錄,最後在鏈接生成目標文件
Ⅵ C++中怎樣用條件編譯防止多文件重復編譯!
假設頭文件為test.h方法一: test.h最上面加上 #pragma once方法二: test.h中上面加上 #ifndef __H_TEST_ #define __H_TEST_中間加上你之前的代碼,主要是方法的聲明,比如 int Add(int a, int b);.....最後面加上 #endif
Ⅶ STM32為避免頭文件重復編譯,需要採用什麼措施
#ifdef _ABC_H
****
#endif
Ⅷ 如何改動makefile來避免沒有改動過的.c文件重復編譯
本來makefile就是按照時間戳來決定是否編譯哪些文件,所以你這個問題等於沒提。只要你不make clean。當出現錯誤後修改在重新make的話 它只會繼續編譯那些時間戳大於剛才編譯的時間戳,所以那些沒有改動的c文件是不會再參與編譯的。
Ⅸ C++頭文件重復編譯問題;
1.高級點兒的編譯器都會對代碼進行優化,你寫一些必要的代碼,才能增加體積……
2.我們要防止重復定義,所以需要使用#ifndef之類的宏,例如:
a.h中有
#include"b.h"
main.cpp中
#include"a.h"
#include"b.h"
那麼在編譯的時候b.h中的內容就會出現重復定義。
3.#if等宏是可以嵌套的。
Ⅹ C++頭文件重復編譯問題;
不會重復包含,你一開始用的宏
#ifndef CUSER_H
#define CUSER_H
就是防止重復包含的.
另外,你可以不包含<string>,然後在User前面做一個前置聲明:class String;
然後把類成員 str聲明為指針,在cpp文件裡面在引入頭文件.
後面一種是比較好的做法