#ifndefの対一度に#pragma

最終編集:2019年11月20日

#pragmaは、非標準が、広くサポートされているプリプロセッサシンボルと、その主な役割は、問題が重複するファイルを導入しないようにすることです。ヘッダファイルでは、定義することができ#pragma onceたり#ifndef、その両方ここ違いを比較します。

#pragma once

#ifndef __ARCH_ARM_SRC_ARTOSYN_AR_UART_H
#define __ARCH_ARM_SRC_ARTOSYN_AR_UART_H

#endif

一般的

防止重複したファイルには、

コンパイラの効率を向上させるためにいくつかの以前のコンパイルシステムでは、コンパイラは、独自のシステムを開発し#pragma once、重複するファイルが含ま防ぐために。(非標準が、広くサポートされています!)

その後の発展に伴い、コンパイラのレベルが#ifndefされている最適化された現在のコンパイル速度の両方、および違いはありません。 

異なる点

  1. #pragma once使用することはできませんgccの3.4バージョンの前に
  2. #ifndefあなたは上記のような、マクロを定義する必要があるという問題があり__ARCH_ARM_SRC_ARTOSYN_AR_UART_H、一般的にはこのマクロ_前缀_文件名_Hのフォーム、変更はファイル名に行われた場合、あなたはまた、内部のマクロを変更する必要があります。
  3. 同じ名前を使用して別の場所のファイルに存在する場合は#ifndef、マクロの定義は同じですが、使用していない、警告が表示され、コンパイル時にリンク#pragma once例外を。

.
├── hello.c
├── hello.h
├── main.c
└── Src
    ├── hello.c
    └── hello.h

主な機能

#include <stdio.h>
#include <stdlib.h>
#include "hello.h"
#include "./Src/hello.h"

int main(int argc, char **argv)
{
    say_hello();
    say_hello_in_src();
    exit(0);
}

gcc main.c hello.c ./Src/hello.c -o a.out 警告

main.c: In function ‘main’:
main.c:9:5: warning: implicit declaration of function ‘say_hello_in_src’ [-Wimplicit-function-declaration]
     say_hello_in_src();

おすすめ

転載: www.cnblogs.com/gaox97329498/p/11900671.html